Hi Greg, this patch is applied in the wrong place (the wrong case) here in sock_getsockopt(). The function seems to have changed in a number of places after 5.10, apparently too much for an automatic(?!) merge. On Sat, 2024-01-13 at 10:49 +0100, Greg Kroah-Hartman wrote: > 5.10-stable review patch. If anyone has any objections, please let > me know. > > ------------------ > > From: Jörn-Thorben Hinz <jthinz@xxxxxxxxxxxxxxxxxxxx> > > [ Upstream commit 7f6ca95d16b96567ce4cf458a2790ff17fa620c3 ] > > Commit 9718475e6908 ("socket: Add SO_TIMESTAMPING_NEW") added the new > socket option SO_TIMESTAMPING_NEW. Setting the option is handled in > sk_setsockopt(), querying it was not handled in sk_getsockopt(), > though. > > Following remarks on an earlier submission of this patch, keep the > old > behavior of getsockopt(SO_TIMESTAMPING_OLD) which returns the active > flags even if they actually have been set through > SO_TIMESTAMPING_NEW. > > The new getsockopt(SO_TIMESTAMPING_NEW) is stricter, returning flags > only if they have been set through the same option. > > Fixes: 9718475e6908 ("socket: Add SO_TIMESTAMPING_NEW") > Link: > https://lore.kernel.org/lkml/20230703175048.151683-1-jthinz@xxxxxxxxxxxxxxxxxxxx/ > Link: > https://lore.kernel.org/netdev/0d7cddc9-03fa-43db-a579-14f3e822615b@xxxxxxxxxxxxxxxx/ > Signed-off-by: Jörn-Thorben Hinz <jthinz@xxxxxxxxxxxxxxxxxxxx> > Reviewed-by: Willem de Bruijn <willemb@xxxxxxxxxx> > Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> > Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx> > --- > net/core/sock.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/net/core/sock.c b/net/core/sock.c > index a069b5476df46..9c3bc24bfdd1f 100644 > --- a/net/core/sock.c > +++ b/net/core/sock.c > @@ -1383,9 +1383,16 @@ int sock_getsockopt(struct socket *sock, int > level, int optname, > break; > > case SO_LINGER: > + case SO_TIMESTAMPING_NEW: > lv = sizeof(v.ling); > - v.ling.l_onoff = sock_flag(sk, SOCK_LINGER); > - v.ling.l_linger = sk->sk_lingertime / HZ; > + /* For the later-added case SO_TIMESTAMPING_NEW: Be > strict about only > + * returning the flags when they were set through the > same option. > + * Don't change the beviour for the old case > SO_TIMESTAMPING_OLD. > + */ > + if (optname == SO_TIMESTAMPING_OLD || sock_flag(sk, > SOCK_TSTAMP_NEW)) { > + v.ling.l_onoff = sock_flag(sk, SOCK_LINGER); > + v.ling.l_linger = sk->sk_lingertime / HZ; > + } > break; > > case SO_BSDCOMPAT: