lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 021/757] socket: dont clear SOCK_TSTAMP_NEW when SO_TIMESTAMPNS is disabled
    Date
    From: Christian Eggers <ceggers@arri.de>

    [ Upstream commit 4e3bbb33e6f36e4b05be1b1b9b02e3dd5aaa3e69 ]

    SOCK_TSTAMP_NEW (timespec64 instead of timespec) is also used for
    hardware time stamps (configured via SO_TIMESTAMPING_NEW).

    User space (ptp4l) first configures hardware time stamping via
    SO_TIMESTAMPING_NEW which sets SOCK_TSTAMP_NEW. In the next step, ptp4l
    disables SO_TIMESTAMPNS(_NEW) (software time stamps), but this must not
    switch hardware time stamps back to "32 bit mode".

    This problem happens on 32 bit platforms were the libc has already
    switched to struct timespec64 (from SO_TIMExxx_OLD to SO_TIMExxx_NEW
    socket options). ptp4l complains with "missing timestamp on transmitted
    peer delay request" because the wrong format is received (and
    discarded).

    Fixes: 887feae36aee ("socket: Add SO_TIMESTAMP[NS]_NEW")
    Fixes: 783da70e8396 ("net: add sock_enable_timestamps")
    Signed-off-by: Christian Eggers <ceggers@arri.de>
    Acked-by: Willem de Bruijn <willemb@google.com>
    Acked-by: Deepa Dinamani <deepa.kernel@gmail.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/core/sock.c | 1 -
    1 file changed, 1 deletion(-)

    --- a/net/core/sock.c
    +++ b/net/core/sock.c
    @@ -769,7 +769,6 @@ static void __sock_set_timestamps(struct
    } else {
    sock_reset_flag(sk, SOCK_RCVTSTAMP);
    sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
    - sock_reset_flag(sk, SOCK_TSTAMP_NEW);
    }
    }


    \
     
     \ /
      Last update: 2020-10-27 17:40    [W:4.339 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site