lkml.org 
[lkml]   [2020]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 010/138] drivers/net/wan/lapbether: Fixed the value of hard_header_len
    Date
    From: Xie He <xie.he.0141@gmail.com>

    [ Upstream commit 9dc829a135fb5927f1519de11286e2bbb79f5b66 ]

    When this driver transmits data,
    first this driver will remove a pseudo header of 1 byte,
    then the lapb module will prepend the LAPB header of 2 or 3 bytes,
    then this driver will prepend a length field of 2 bytes,
    then the underlying Ethernet device will prepend its own header.

    So, the header length required should be:
    -1 + 3 + 2 + "the header length needed by the underlying device".

    This patch fixes kernel panic when this driver is used with AF_PACKET
    SOCK_DGRAM sockets.

    Signed-off-by: Xie He <xie.he.0141@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wan/lapbether.c | 9 ++++++++-
    1 file changed, 8 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c
    index 0f1217b506ad2..5a6f27298b90f 100644
    --- a/drivers/net/wan/lapbether.c
    +++ b/drivers/net/wan/lapbether.c
    @@ -303,7 +303,6 @@ static void lapbeth_setup(struct net_device *dev)
    dev->netdev_ops = &lapbeth_netdev_ops;
    dev->needs_free_netdev = true;
    dev->type = ARPHRD_X25;
    - dev->hard_header_len = 3;
    dev->mtu = 1000;
    dev->addr_len = 0;
    }
    @@ -324,6 +323,14 @@ static int lapbeth_new_device(struct net_device *dev)
    if (!ndev)
    goto out;

    + /* When transmitting data:
    + * first this driver removes a pseudo header of 1 byte,
    + * then the lapb module prepends an LAPB header of at most 3 bytes,
    + * then this driver prepends a length field of 2 bytes,
    + * then the underlying Ethernet device prepends its own header.
    + */
    + ndev->hard_header_len = -1 + 3 + 2 + dev->hard_header_len;
    +
    lapbeth = netdev_priv(ndev);
    lapbeth->axdev = ndev;

    --
    2.25.1


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