lkml.org 
[lkml]   [2022]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 21/86] rose: check NULL rose_loopback_neigh->loopback
    Date
    From: Bernard Pidoux <f6bvp@free.fr>

    [ Upstream commit 3c53cd65dece47dd1f9d3a809f32e59d1d87b2b8 ]

    Commit 3b3fd068c56e3fbea30090859216a368398e39bf added NULL check for
    `rose_loopback_neigh->dev` in rose_loopback_timer() but omitted to
    check rose_loopback_neigh->loopback.

    It thus prevents *all* rose connect.

    The reason is that a special rose_neigh loopback has a NULL device.

    /proc/net/rose_neigh illustrates it via rose_neigh_show() function :
    [...]
    seq_printf(seq, "%05d %-9s %-4s %3d %3d %3s %3s %3lu %3lu",
    rose_neigh->number,
    (rose_neigh->loopback) ? "RSLOOP-0" : ax2asc(buf, &rose_neigh->callsign),
    rose_neigh->dev ? rose_neigh->dev->name : "???",
    rose_neigh->count,

    /proc/net/rose_neigh displays special rose_loopback_neigh->loopback as
    callsign RSLOOP-0:

    addr callsign dev count use mode restart t0 tf digipeaters
    00001 RSLOOP-0 ??? 1 2 DCE yes 0 0

    By checking rose_loopback_neigh->loopback, rose_rx_call_request() is called
    even in case rose_loopback_neigh->dev is NULL. This repairs rose connections.

    Verification with rose client application FPAC:

    FPAC-Node v 4.1.3 (built Aug 5 2022) for LINUX (help = h)
    F6BVP-4 (Commands = ?) : u
    Users - AX.25 Level 2 sessions :
    Port Callsign Callsign AX.25 state ROSE state NetRom status
    axudp F6BVP-5 -> F6BVP-9 Connected Connected ---------

    Fixes: 3b3fd068c56e ("rose: Fix Null pointer dereference in rose_send_frame()")
    Signed-off-by: Bernard Pidoux <f6bvp@free.fr>
    Suggested-by: Francois Romieu <romieu@fr.zoreil.com>
    Cc: Thomas DL9SAU Osterried <thomas@osterried.de>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/rose/rose_loopback.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/net/rose/rose_loopback.c b/net/rose/rose_loopback.c
    index 11c45c8c6c164..036d92c0ad794 100644
    --- a/net/rose/rose_loopback.c
    +++ b/net/rose/rose_loopback.c
    @@ -96,7 +96,8 @@ static void rose_loopback_timer(struct timer_list *unused)
    }

    if (frametype == ROSE_CALL_REQUEST) {
    - if (!rose_loopback_neigh->dev) {
    + if (!rose_loopback_neigh->dev &&
    + !rose_loopback_neigh->loopback) {
    kfree_skb(skb);
    continue;
    }
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-29 13:12    [W:2.371 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site