Commit 323a391a authored by Oliver Hartkopp's avatar Oliver Hartkopp Committed by Jakub Kicinski

can: isotp: isotp_setsockopt(): block setsockopt on bound sockets

The isotp socket can be widely configured in its behaviour regarding addressing
types, fill-ups, receive pattern tests and link layer length. Usually all
these settings need to be fixed before bind() and can not be changed
afterwards.

This patch adds a check to enforce the common usage pattern.

Fixes: e057dd3f ("can: add ISO 15765-2:2016 transport protocol")
Signed-off-by: default avatarOliver Hartkopp <socketcan@hartkopp.net>
Tested-by: default avatarThomas Wagner <thwa1@web.de>
Link: https://lore.kernel.org/r/20201203140604.25488-2-socketcan@hartkopp.netSigned-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
Link: https://lore.kernel.org/r/20201204133508.742120-3-mkl@pengutronix.deSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 72d05c00
...@@ -1157,6 +1157,9 @@ static int isotp_setsockopt(struct socket *sock, int level, int optname, ...@@ -1157,6 +1157,9 @@ static int isotp_setsockopt(struct socket *sock, int level, int optname,
if (level != SOL_CAN_ISOTP) if (level != SOL_CAN_ISOTP)
return -EINVAL; return -EINVAL;
if (so->bound)
return -EISCONN;
switch (optname) { switch (optname) {
case CAN_ISOTP_OPTS: case CAN_ISOTP_OPTS:
if (optlen != sizeof(struct can_isotp_options)) if (optlen != sizeof(struct can_isotp_options))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment