Content-Length: 320126 | pFad | https://github.com/python/cpython/issues/150406

ad `socket` is missing a null pointer check on `PyThread_allocate_lock` return value · Issue #150406 · python/cpython · GitHub
Skip to content

socket is missing a null pointer check on PyThread_allocate_lock return value #150406

Description

@KowalskiThomas

Bug report

Bug description:

In socketmodule.c, a call is made to PyThread_allocate_lock to allocate a lock, but its return value is not checked.

cpython/Modules/socketmodule.c

Lines 9294 to 9296 in a189e3d

#if defined(USE_GETHOSTBYNAME_LOCK)
netdb_lock = PyThread_allocate_lock();
#endif

That same netdb_lock is later used without being checked for null-ness either.

cpython/Modules/socketmodule.c

Lines 6219 to 6237 in a189e3d

#ifdef USE_GETHOSTBYNAME_LOCK
PyThread_acquire_lock(netdb_lock, 1);
#endif
_Py_COMP_DIAG_PUSH
_Py_COMP_DIAG_IGNORE_DEPR_DECLS
h = gethostbyname(name);
_Py_COMP_DIAG_POP
#endif /* HAVE_GETHOSTBYNAME_R */
Py_END_ALLOW_THREADS
/* Some C libraries would require addr.__ss_family instead of
addr.ss_family.
Therefore, we cast the sockaddr_storage into sockaddr to
access sa_family. */
sa = SAS2SA(&addr);
ret = gethost_common(state, h, SAS2SA(&addr), sizeof(addr),
sa->sa_family);
#ifdef USE_GETHOSTBYNAME_LOCK
PyThread_release_lock(netdb_lock);
#endif

If PyThread_allocate_lock fails (due to being out of memory, that's the only failure case as far as I can tell), this will lead to a crash.

Backports

Once fix, the fix would have to be backported to 3.15 / 3.14 / 3.13 which have the same problem.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Other, macOS

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    extension-modulesC modules in the Modules dirtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions









    ApplySandwichStrip

    pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


    --- a PPN by Garber Painting Akron. With Image Size Reduction included!

    Fetched URL: https://github.com/python/cpython/issues/150406

    Alternative Proxies:

    Alternative Proxy

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy