Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77d4b1d3 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

net: ping: do not abuse udp_poll()



Alexander reported various KASAN messages triggered in recent kernels

The problem is that ping sockets should not use udp_poll() in the first
place, and recent changes in UDP stack finally exposed this old bug.

Fixes: c319b4d7 ("net: ipv4: add IPPROTO_ICMP socket kind")
Fixes: 6d0bfe22 ("net: ipv6: Add IPv6 support to the ping socket.")
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Reported-by: default avatarSasha Levin <alexander.levin@verizon.com>
Cc: Solar Designer <solar@openwall.com>
Cc: Vasiliy Kulikov <segoon@openwall.com>
Cc: Lorenzo Colitti <lorenzo@google.com>
Acked-By: default avatarLorenzo Colitti <lorenzo@google.com>
Tested-By: default avatarLorenzo Colitti <lorenzo@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b07ac989
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1007,6 +1007,7 @@ int inet6_hash_connect(struct inet_timewait_death_row *death_row,
 */
extern const struct proto_ops inet6_stream_ops;
extern const struct proto_ops inet6_dgram_ops;
extern const struct proto_ops inet6_sockraw_ops;

struct group_source_req;
struct group_filter;
+1 −1
Original line number Diff line number Diff line
@@ -1043,7 +1043,7 @@ static struct inet_protosw inetsw_array[] =
		.type =       SOCK_DGRAM,
		.protocol =   IPPROTO_ICMP,
		.prot =       &ping_prot,
		.ops =        &inet_dgram_ops,
		.ops =        &inet_sockraw_ops,
		.flags =      INET_PROTOSW_REUSE,
       },

+1 −1
Original line number Diff line number Diff line
@@ -192,7 +192,7 @@ static struct inet_protosw pingv6_protosw = {
	.type =      SOCK_DGRAM,
	.protocol =  IPPROTO_ICMPV6,
	.prot =      &pingv6_prot,
	.ops =       &inet6_dgram_ops,
	.ops =       &inet6_sockraw_ops,
	.flags =     INET_PROTOSW_REUSE,
};

+1 −1
Original line number Diff line number Diff line
@@ -1338,7 +1338,7 @@ void raw6_proc_exit(void)
#endif	/* CONFIG_PROC_FS */

/* Same as inet6_dgram_ops, sans udp_poll.  */
static const struct proto_ops inet6_sockraw_ops = {
const struct proto_ops inet6_sockraw_ops = {
	.family		   = PF_INET6,
	.owner		   = THIS_MODULE,
	.release	   = inet6_release,