Skip to content

Double free of init_file in phpdbg_prompt.c #12962

Closed

Description

@burkeartem

Description

Pointer init_file is passed to a function free at phpdbg_prompt.c:368 by calling function after the referenced memory was deallocated at phpdbg_prompt.c:333 by passing as first parameter to function phpdbg_try_file_init at phpdbg_prompt.c:367.

  1. In line 367 init_file is passed to function phpdbg_try_file_init and variable free_init (last parameter) is set to 1:
    phpdbg_try_file_init(init_file, strlen(init_file), 1);
    free(init_file);
  2. Then init_file is freed in function phpdbg_try_file_init:
    if (free_init) {
    free(init_file);
    }
  3. init_file is freed again in line 368:
    phpdbg_try_file_init(init_file, strlen(init_file), 1);
    free(init_file);

This is probably a small typo, as there is a counterexample here (free_init is set to 0):

phpdbg_try_file_init(sys_ini, strlen(sys_ini), 0);
free(sys_ini);

Found by Linux Verification Center (portal.linuxtesting.ru) with SVACE.
Author A. Burke.

PHP Version

PHP 8.2.3

Operating System

No response

Activity

  1. ndossche commented on Dec 17, 2023

    @ndossche
    Member

    Thanks for the report. This is a true positive as I was able to create a reproducer. PR coming soon.

  2. added a commit that references this issue on Dec 17, 2023
    1413a07
  3. added 2 commits that reference this issue on Dec 17, 2023
    a6d17bf
    4fc336c
  4. added a commit that references this issue on Dec 17, 2023
    61b7370
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions