Syzkaller found a dereference in igmp_leavegroup() where inm->inm_rti
authorbluhm <bluhm@openbsd.org>
Wed, 15 Dec 2021 15:58:01 +0000 (15:58 +0000)
committerbluhm <bluhm@openbsd.org>
Wed, 15 Dec 2021 15:58:01 +0000 (15:58 +0000)
commit5af2eee0279400f751ee5155bee172d56ab23d16
treebd690728d437faf4fc5b9c00dc670165e75be27e
parent5a74f403f040e0ca4bab4551aa5dde1b4bcba109
Syzkaller found a dereference in igmp_leavegroup() where inm->inm_rti
is NULL.  It should be set in rti_fill(), but is not if malloc(9)
fails.  There is no rollback after malloc failure so the field stays
uninitialized.  The code is only called from ioctl, setsockopt or
a task.  Malloc should wait instead of failing, otherwise syscalls
would be unreliable.  While there also put an M_WAIT in the init
code.  During init malloc must not fail.
OK mvs@
Reported-by: syzbot+e22326057ccf34908d78@syzkaller.appspotmail.com
sys/netinet/igmp.c