]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
pptp: fix illegal memory access caused by multiple bind()s
authorHannes Frederic Sowa <hannes@stressinduktion.org>
Fri, 22 Jan 2016 00:39:43 +0000 (01:39 +0100)
committerJiri Slaby <jslaby@suse.cz>
Wed, 2 Mar 2016 15:29:04 +0000 (16:29 +0100)
commit977abf5d26c2697f09c72efc579a759dcc6a4808
tree6e97aa96b22941a1b0ce225457153d4bafc6313b
parent45c4c852c8ab5fb7e879892afa665dc47e55956d
pptp: fix illegal memory access caused by multiple bind()s

[ Upstream commit 9a368aff9cb370298fa02feeffa861f2db497c18 ]

Several times already this has been reported as kasan reports caused by
syzkaller and trinity and people always looked at RCU races, but it is
much more simple. :)

In case we bind a pptp socket multiple times, we simply add it to
the callid_sock list but don't remove the old binding. Thus the old
socket stays in the bucket with unused call_id indexes and doesn't get
cleaned up. This causes various forms of kasan reports which were hard
to pinpoint.

Simply don't allow multiple binds and correct error handling in
pptp_bind. Also keep sk_state bits in place in pptp_connect.

Fixes: 00959ade36acad ("PPTP: PPP over IPv4 (Point-to-Point Tunneling Protocol)")
Cc: Dmitry Kozlov <xeb@mail.ru>
Cc: Sasha Levin <sasha.levin@oracle.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Cc: Dave Jones <davej@codemonkey.org.uk>
Reported-by: Dave Jones <davej@codemonkey.org.uk>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
drivers/net/ppp/pptp.c