Kaydet (Commit) e359bc24 authored tarafından Alexey Izbyshev's avatar Alexey Izbyshev Kaydeden (comit) Serhiy Storchaka

bpo-35161: Fix stack-use-after-scope in grp.getgr{nam,gid} and pwd.getpw{nam,uid}. (GH-10319)

Reported by ASAN.
üst 52465e1b
...@@ -124,11 +124,12 @@ grp_getgrgid_impl(PyObject *module, PyObject *id) ...@@ -124,11 +124,12 @@ grp_getgrgid_impl(PyObject *module, PyObject *id)
Py_DECREF(py_int_id); Py_DECREF(py_int_id);
} }
#ifdef HAVE_GETGRGID_R #ifdef HAVE_GETGRGID_R
Py_BEGIN_ALLOW_THREADS
int status; int status;
Py_ssize_t bufsize; Py_ssize_t bufsize;
/* Note: 'grp' will be used via pointer 'p' on getgrgid_r success. */
struct group grp; struct group grp;
Py_BEGIN_ALLOW_THREADS
bufsize = sysconf(_SC_GETGR_R_SIZE_MAX); bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
if (bufsize == -1) { if (bufsize == -1) {
bufsize = DEFAULT_BUFFER_SIZE; bufsize = DEFAULT_BUFFER_SIZE;
...@@ -204,11 +205,12 @@ grp_getgrnam_impl(PyObject *module, PyObject *name) ...@@ -204,11 +205,12 @@ grp_getgrnam_impl(PyObject *module, PyObject *name)
if (PyBytes_AsStringAndSize(bytes, &name_chars, NULL) == -1) if (PyBytes_AsStringAndSize(bytes, &name_chars, NULL) == -1)
goto out; goto out;
#ifdef HAVE_GETGRNAM_R #ifdef HAVE_GETGRNAM_R
Py_BEGIN_ALLOW_THREADS
int status; int status;
Py_ssize_t bufsize; Py_ssize_t bufsize;
/* Note: 'grp' will be used via pointer 'p' on getgrnam_r success. */
struct group grp; struct group grp;
Py_BEGIN_ALLOW_THREADS
bufsize = sysconf(_SC_GETGR_R_SIZE_MAX); bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
if (bufsize == -1) { if (bufsize == -1) {
bufsize = DEFAULT_BUFFER_SIZE; bufsize = DEFAULT_BUFFER_SIZE;
......
...@@ -131,11 +131,12 @@ pwd_getpwuid(PyObject *module, PyObject *uidobj) ...@@ -131,11 +131,12 @@ pwd_getpwuid(PyObject *module, PyObject *uidobj)
return NULL; return NULL;
} }
#ifdef HAVE_GETPWUID_R #ifdef HAVE_GETPWUID_R
Py_BEGIN_ALLOW_THREADS
int status; int status;
Py_ssize_t bufsize; Py_ssize_t bufsize;
/* Note: 'pwd' will be used via pointer 'p' on getpwuid_r success. */
struct passwd pwd; struct passwd pwd;
Py_BEGIN_ALLOW_THREADS
bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
if (bufsize == -1) { if (bufsize == -1) {
bufsize = DEFAULT_BUFFER_SIZE; bufsize = DEFAULT_BUFFER_SIZE;
...@@ -212,11 +213,12 @@ pwd_getpwnam_impl(PyObject *module, PyObject *name) ...@@ -212,11 +213,12 @@ pwd_getpwnam_impl(PyObject *module, PyObject *name)
if (PyBytes_AsStringAndSize(bytes, &name_chars, NULL) == -1) if (PyBytes_AsStringAndSize(bytes, &name_chars, NULL) == -1)
goto out; goto out;
#ifdef HAVE_GETPWNAM_R #ifdef HAVE_GETPWNAM_R
Py_BEGIN_ALLOW_THREADS
int status; int status;
Py_ssize_t bufsize; Py_ssize_t bufsize;
/* Note: 'pwd' will be used via pointer 'p' on getpwnam_r success. */
struct passwd pwd; struct passwd pwd;
Py_BEGIN_ALLOW_THREADS
bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
if (bufsize == -1) { if (bufsize == -1) {
bufsize = DEFAULT_BUFFER_SIZE; bufsize = DEFAULT_BUFFER_SIZE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment