]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
net: sock: tracing: Fix sock_exceed_buf_limit not to dereference stale pointer
authorSteven Rostedt (Google) <rostedt@goodmis.org>
Wed, 6 Jul 2022 14:50:40 +0000 (10:50 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 21 Jul 2022 18:42:43 +0000 (20:42 +0200)
commit98d0dcf81a992722703d6c97930d3d61cb35f6f3
treefe8736fdc179ca9949a131d498953334d1a733d1
parentd5320c6a27aa975aff740f9cb481dcbde48f4348
net: sock: tracing: Fix sock_exceed_buf_limit not to dereference stale pointer

commit 820b8963adaea34a87abbecb906d1f54c0aabfb7 upstream.

The trace event sock_exceed_buf_limit saves the prot->sysctl_mem pointer
and then dereferences it in the TP_printk() portion. This is unsafe as the
TP_printk() portion is executed at the time the buffer is read. That is,
it can be seconds, minutes, days, months, even years later. If the proto
is freed, then this dereference will can also lead to a kernel crash.

Instead, save the sysctl_mem array into the ring buffer and have the
TP_printk() reference that instead. This is the proper and safe way to
read pointers in trace events.

Link: https://lore.kernel.org/all/20220706052130.16368-12-kuniyu@amazon.com/
Cc: stable@vger.kernel.org
Fixes: 3847ce32aea9f ("core: add tracepoints for queueing skb to rcvbuf")
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Acked-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/trace/events/sock.h