• Eric Biggers's avatar
    af_key: fix buffer overread in parse_exthdrs() · 4e765b49
    Eric Biggers authored
    If a message sent to a PF_KEY socket ended with an incomplete extension
    header (fewer than 4 bytes remaining), then parse_exthdrs() read past
    the end of the message, into uninitialized memory.  Fix it by returning
    -EINVAL in this case.
    
    Reproducer:
    
    	#include <linux/pfkeyv2.h>
    	#include <sys/socket.h>
    	#include <unistd.h>
    
    	int main()
    	{
    		int sock = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);
    		char buf[17] = { 0 };
    		struct sadb_msg *msg = (void *)buf;
    
    		msg->sadb_msg_version = PF_KEY_V2;
    		msg->sadb_msg_type = SADB_DELETE;
    		msg->sadb_msg_len = 2;
    
    		write(sock, buf, 17);
    	}
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
    4e765b49
af_key.c 101 KB