8000 gh-132075: Fix possible use of sockaddr structures with uninitialized… · python/cpython@f882d1e · GitHub
[go: up one dir, main page]

Skip to content

Commit f882d1e

Browse files
gh-132075: Fix possible use of sockaddr structures with uninitialized members
Now all structure members are initialized with zeroes by default.
1 parent 37d47d4 commit f882d1e

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix possible use of :mod:`socket` address structures with uninitialized
2+
members. Now all structure members are initialized with zeroes by default.

Modules/socketmodule.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1820,6 +1820,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
18201820
assert(path.len >= 0);
18211821

18221822
struct sockaddr_un* addr = &addrbuf->un;
1823+
memset(addr, 0, sizeof(struct sockaddr_un));
18231824
#ifdef __linux__
18241825
if (path.len == 0 || *(const char *)path.buf == 0) {
18251826
/* Linux abstract namespace extension:
@@ -1863,6 +1864,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
18631864
{
18641865
int pid, groups;
18651866
struct sockaddr_nl* addr = &addrbuf->nl;
1867+
memset(addr, 0, sizeof(struct sockaddr_nl));
18661868
if (!PyTuple_Check(args)) {
18671869
PyErr_Format(
18681870
PyExc_TypeError,
@@ -1890,6 +1892,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
18901892
{
18911893
unsigned int node, port;
18921894
struct sockaddr_qrtr* addr = &addrbuf->sq;
1895+
memset(addr, 0, sizeof(struct sockaddr_qrtr));
18931896
if (!PyTuple_Check(args)) {
18941897
PyErr_Format(
18951898
PyExc_TypeError,
@@ -1969,6 +1972,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
19691972
return 0;
19701973
}
19711974
struct sockaddr_in* addr = &addrbuf->in;
1975+
memset(addr, 0, sizeof(struct sockaddr_in));
19721976
result = setipaddr(s->state, host.buf, (struct sockaddr *)addr,
19731977
sizeof(*addr), AF_INET);
19741978
idna_cleanup(&host);
@@ -2014,6 +2018,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
20142018
return 0;
20152019
}
20162020
struct sockaddr_in6* addr = &addrbuf->in6;
2021+
memset(addr, 0, sizeof(struct sockaddr_in6));
20172022
result = setipaddr(s->state, host.buf, (struct sockaddr *)addr,
20182023
sizeof(*addr), AF_INET6);
20192024
idna_cleanup(&host);
@@ -2078,6 +2083,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
20782083
{
20792084
const char *straddr;
20802085
struct sockaddr_rc *addr = &addrbuf->bt_rc;
2086+
memset(addr, 0, sizeof(struct sockaddr_rc));
20812087
_BT_RC_MEMB(addr, family) = AF_BLUETOOTH;
20822088
#ifdef MS_WINDOWS
20832089
unsigned long channel;
@@ -2104,6 +2110,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
21042110
case BTPROTO_HCI:
21052111
{
21062112
struct sockaddr_hci *addr = &addrbuf->bt_hci;
2113+
memset(addr, 0, sizeof(struct sockaddr_hci));
21072114
#if defined(__NetBSD__) || defined(__DragonFly__)
21082115
const char *straddr;
21092116
_BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
@@ -2155,6 +2162,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
21552162
const char *straddr;
21562163

21572164
struct sockaddr_sco *addr = &addrbuf->bt_sco;
2165+
memset(addr, 0, sizeof(struct sockaddr_sco));
21582166
_BT_SCO_MEMB(addr, family) = AF_BLUETOOTH;
21592167
if (!PyBytes_Check(args)) {
21602168
PyErr_Format(PyExc_OSError,
@@ -2232,6 +2240,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
22322240
return 0;
22332241
}
22342242
struct sockaddr_ll* addr = &addrbuf->ll;
2243+
memset(addr, 0, sizeof(struct sockaddr_ll));
22352244
addr->sll_family = AF_PACKET;
22362245
addr->sll_protocol = htons((short)protoNumber);
22372246
addr->sll_ifindex = ifr.ifr_ifindex;
@@ -2318,6 +2327,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
23182327
struct ifreq ifr;
23192328
Py_ssize_t len;
23202329
struct sockaddr_can *addr = &addrbuf->can;
2330+
memset(addr, 0, sizeof(struct sockaddr_can));
23212331

23222332
if (!PyTuple_Check(args)) {
23232333
PyErr_Format(PyExc_TypeError,
@@ -2370,6 +2380,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
23702380
unsigned long int rx_id, tx_id;
23712381

23722382
struct sockaddr_can *addr = &addrbuf->can;
2383+
memset(addr, 0, sizeof(struct sockaddr_can));
23732384

23742385
if (!PyArg_ParseTuple(args, "O&kk", PyUnicode_FSConverter,
23752386
&interfaceName,
@@ -2417,6 +2428,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
24172428
uint8_t j1939_addr;
24182429

24192430
struct sockaddr_can *addr = &addrbuf->can;
2431+
memset(addr, 0, sizeof(struct sockaddr_can));
24202432

24212433
if (!PyArg_ParseTuple(args, "O&KIB", PyUnicode_FSConverter,
24222434
&interfaceName,
@@ -2469,6 +2481,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
24692481
case SYSPROTO_CONTROL:
24702482
{
24712483
struct sockaddr_ctl *addr = &addrbuf->ctl;
2484+
memset(addr, 0, sizeof(struct sockaddr_ctl));
24722485
addr->sc_family = AF_SYSTEM;
24732486
addr->ss_sysaddr = AF_SYS_CONTROL;
24742487

0 commit comments

Comments
 (0)
0