Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tomoyo: Check address length before reading address family

KMSAN will complain if valid address length passed to bind()/connect()/
sendmsg() is shorter than sizeof("struct sockaddr"->sa_family) bytes.

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: James Morris <jamorris@linux.microsoft.com>

authored by

Tetsuo Handa and committed by
James Morris
e6193f78 e80b1859

+4
+4
security/tomoyo/network.c
··· 505 505 { 506 506 struct tomoyo_inet_addr_info *i = &address->inet; 507 507 508 + if (addr_len < offsetofend(struct sockaddr, sa_family)) 509 + return 0; 508 510 switch (addr->sa_family) { 509 511 case AF_INET6: 510 512 if (addr_len < SIN6_LEN_RFC2133) ··· 596 594 { 597 595 struct tomoyo_unix_addr_info *u = &address->unix0; 598 596 597 + if (addr_len < offsetofend(struct sockaddr, sa_family)) 598 + return 0; 599 599 if (addr->sa_family != AF_UNIX) 600 600 return 0; 601 601 u->addr = ((struct sockaddr_un *) addr)->sun_path;