Skip to content

Commit

Permalink
can: add protocol counter for AF_CAN sockets
Browse files Browse the repository at this point in the history
The third column in the output of the following command:

| # grep CAN /proc/net/protocols

is systematically '0': use sock_prot_inuse_add() to account for the number
of sockets for each protocol on top of AF_CAN family.

Signed-off-by: Davide Caratti <dcaratti@redhat.com>
Link: https://patch.msgid.link/9db5d0e6c11b232ad895885616f1258882a32f61.1741952160.git.dcaratti@redhat.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
  • Loading branch information
Davide Caratti authored and Marc Kleine-Budde committed Mar 14, 2025
1 parent 958ee3d commit 6bffe88
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 1 deletion.
2 changes: 2 additions & 0 deletions net/can/af_can.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ static int can_create(struct net *net, struct socket *sock, int protocol,
sock_orphan(sk);
sock_put(sk);
sock->sk = NULL;
} else {
sock_prot_inuse_add(net, sk->sk_prot, 1);
}

errout:
Expand Down
1 change: 1 addition & 0 deletions net/can/bcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1625,6 +1625,7 @@ static int bcm_release(struct socket *sock)
sock->sk = NULL;

release_sock(sk);
sock_prot_inuse_add(net, sk->sk_prot, -1);
sock_put(sk);

return 0;
Expand Down
1 change: 1 addition & 0 deletions net/can/isotp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1239,6 +1239,7 @@ static int isotp_release(struct socket *sock)
sock->sk = NULL;

release_sock(sk);
sock_prot_inuse_add(net, sk->sk_prot, -1);
sock_put(sk);

return 0;
Expand Down
5 changes: 4 additions & 1 deletion net/can/raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -397,11 +397,13 @@ static int raw_release(struct socket *sock)
{
struct sock *sk = sock->sk;
struct raw_sock *ro;
struct net *net;

if (!sk)
return 0;

ro = raw_sk(sk);
net = sock_net(sk);

spin_lock(&raw_notifier_lock);
while (raw_busy_notifier == ro) {
Expand All @@ -421,7 +423,7 @@ static int raw_release(struct socket *sock)
raw_disable_allfilters(dev_net(ro->dev), ro->dev, sk);
netdev_put(ro->dev, &ro->dev_tracker);
} else {
raw_disable_allfilters(sock_net(sk), NULL, sk);
raw_disable_allfilters(net, NULL, sk);
}
}

Expand All @@ -440,6 +442,7 @@ static int raw_release(struct socket *sock)
release_sock(sk);
rtnl_unlock();

sock_prot_inuse_add(net, sk->sk_prot, -1);
sock_put(sk);

return 0;
Expand Down

0 comments on commit 6bffe88

Please sign in to comment.