sock_set_timestamping() can fail for different reasons. The returned
value should then be checked.

If sock_set_timestamping() fails for at least one subflow, the first
error is now reported to the userspace, similar to what is done with
other socket options.

Fixes: 9061f24bf82e ("mptcp: sockopt: propagate timestamp request to subflows")
Cc: [email protected]
Reported-by: Willem de Bruijn <[email protected]>
Closes: https://lore.kernel.org/[email protected]
Reviewed-by: Mat Martineau <[email protected]>
Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
---
 net/mptcp/sockopt.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
index 87b5796d0135..91aa57f1d0fd 100644
--- a/net/mptcp/sockopt.c
+++ b/net/mptcp/sockopt.c
@@ -241,15 +241,19 @@ static int 
mptcp_setsockopt_sol_socket_timestamping(struct mptcp_sock *msk,
 
        mptcp_for_each_subflow(msk, subflow) {
                struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
+               int err;
 
                lock_sock(ssk);
-               sock_set_timestamping(ssk, optname, timestamping);
+               err = sock_set_timestamping(ssk, optname, timestamping);
                release_sock(ssk);
+
+               if (err < 0 && ret == 0)
+                       ret = err;
        }
 
        release_sock(sk);
 
-       return 0;
+       return ret;
 }
 
 static int mptcp_setsockopt_sol_socket_linger(struct mptcp_sock *msk, 
sockptr_t optval,

-- 
2.53.0


Reply via email to