17 Jan, 2021

1 commit

  • commit b42b3a2744b3e8f427de79896720c72823af91ad upstream.

    Initialize the sockaddr_can structure to prevent a data leak to user space.

    Suggested-by: Cong Wang
    Reported-by: syzbot+057884e2f453e8afebc8@syzkaller.appspotmail.com
    Fixes: e057dd3fc20f ("can: add ISO 15765-2:2016 transport protocol")
    Signed-off-by: Oliver Hartkopp
    Link: https://lore.kernel.org/r/20210112091643.11789-1-socketcan@hartkopp.net
    Signed-off-by: Marc Kleine-Budde
    Signed-off-by: Greg Kroah-Hartman

    Oliver Hartkopp
     

10 Dec, 2020

1 commit

  • The isotp socket can be widely configured in its behaviour regarding addressing
    types, fill-ups, receive pattern tests and link layer length. Usually all
    these settings need to be fixed before bind() and can not be changed
    afterwards.

    This patch adds a check to enforce the common usage pattern.

    Fixes: e057dd3fc20f ("can: add ISO 15765-2:2016 transport protocol")
    Signed-off-by: Oliver Hartkopp
    Tested-by: Thomas Wagner
    Link: https://lore.kernel.org/r/20201203140604.25488-2-socketcan@hartkopp.net
    Signed-off-by: Marc Kleine-Budde
    Link: https://lore.kernel.org/r/20201204133508.742120-3-mkl@pengutronix.de
    Signed-off-by: Jakub Kicinski

    Oliver Hartkopp
     

27 Nov, 2020

1 commit

  • To detect potential bugs in CAN protocol implementations (double removal of
    receiver entries) a WARN() statement has been used if no matching list item was
    found for removal.

    The fault injection issued by syzkaller was able to create a situation where
    the closing of a socket runs simultaneously to the notifier call chain for
    removing the CAN network device in use.

    This case is very unlikely in real life but it doesn't break anything.
    Therefore we just replace the WARN() statement with pr_warn() to preserve the
    notification for the CAN protocol development.

    Reported-by: syzbot+381d06e0c8eaacb8706f@syzkaller.appspotmail.com
    Reported-by: syzbot+d0ddd88c9a7432f041e6@syzkaller.appspotmail.com
    Reported-by: syzbot+76d62d3b8162883c7d11@syzkaller.appspotmail.com
    Signed-off-by: Oliver Hartkopp
    Link: https://lore.kernel.org/r/20201126192140.14350-1-socketcan@hartkopp.net
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     

16 Nov, 2020

2 commits

  • In canfd_rcv(), cfd->len is uninitialized when skb->len = 0, and this
    uninitialized cfd->len is accessed nonetheless by pr_warn_once().

    Fix this uninitialized variable access by checking cfd->len's validity
    condition (cfd->len > CANFD_MAX_DLEN) separately after the skb->len's
    condition is checked, and appropriately modify the log messages that
    are generated as well.
    In case either of the required conditions fail, the skb is freed and
    NET_RX_DROP is returned, same as before.

    Fixes: d4689846881d ("can: af_can: canfd_rcv(): replace WARN_ONCE by pr_warn_once")
    Reported-by: syzbot+9bcb0c9409066696d3aa@syzkaller.appspotmail.com
    Tested-by: Anant Thazhemadam
    Signed-off-by: Anant Thazhemadam
    Link: https://lore.kernel.org/r/20201103213906.24219-3-anant.thazhemadam@gmail.com
    Signed-off-by: Marc Kleine-Budde

    Anant Thazhemadam
     
  • In can_rcv(), cfd->len is uninitialized when skb->len = 0, and this
    uninitialized cfd->len is accessed nonetheless by pr_warn_once().

    Fix this uninitialized variable access by checking cfd->len's validity
    condition (cfd->len > CAN_MAX_DLEN) separately after the skb->len's
    condition is checked, and appropriately modify the log messages that
    are generated as well.
    In case either of the required conditions fail, the skb is freed and
    NET_RX_DROP is returned, same as before.

    Fixes: 8cb68751c115 ("can: af_can: can_rcv(): replace WARN_ONCE by pr_warn_once")
    Reported-by: syzbot+9bcb0c9409066696d3aa@syzkaller.appspotmail.com
    Tested-by: Anant Thazhemadam
    Signed-off-by: Anant Thazhemadam
    Link: https://lore.kernel.org/r/20201103213906.24219-2-anant.thazhemadam@gmail.com
    Signed-off-by: Marc Kleine-Budde

    Anant Thazhemadam
     

04 Nov, 2020

5 commits

  • Don't populate the const array plen on the stack but instead it static. Makes
    the object code smaller by 926 bytes.

    Before:
    text data bss dec hex filename
    26531 1943 64 28538 6f7a net/can/isotp.o

    After:
    text data bss dec hex filename
    25509 2039 64 27612 6bdc net/can/isotp.o

    (gcc version 10.2.0)

    Signed-off-by: Colin Ian King
    Link: https://lore.kernel.org/r/20201020154203.54711-1-colin.king@canonical.com
    Signed-off-by: Marc Kleine-Budde

    Colin Ian King
     
  • As reported by Thomas Wagner:

    https://github.com/hartkopp/can-isotp/issues/34

    the timeout handling for data frames is not enabled when the isotp socket is
    used in listen-only mode (sockopt CAN_ISOTP_LISTEN_MODE). This mode is enabled
    by the isotpsniffer application which therefore became inconsistend with the
    strict rx timeout rules when running the isotp protocol in the operational
    mode.

    This patch fixes this inconsistency by moving the return condition for the
    listen-only mode behind the timeout handling code.

    Reported-by: Thomas Wagner
    Signed-off-by: Oliver Hartkopp
    Fixes: e057dd3fc20f ("can: add ISO 15765-2:2016 transport protocol")
    Link: https://github.com/hartkopp/can-isotp/issues/34
    Link: https://lore.kernel.org/r/20201019120229.89326-1-socketcan@hartkopp.net
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     
  • The help text for the CAN_ISOTP config symbol uses the acronym "PDU". However,
    this acronym is not explained here, nor in Documentation/networking/can.rst.

    Expand the acronym to make it easier for users to decide if they need to enable
    the CAN_ISOTP option or not.

    Signed-off-by: Geert Uytterhoeven
    Link: https://lore.kernel.org/r/20201013141341.28487-1-geert+renesas@glider.be
    Acked-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Geert Uytterhoeven
     
  • When a netdev down event occurs after a successful call to
    j1939_sk_bind(), j1939_netdev_notify() can handle it correctly.

    But if the netdev already in down state before calling j1939_sk_bind(),
    j1939_sk_release() will stay in wait_event_interruptible() blocked
    forever. Because in this case, j1939_netdev_notify() won't be called and
    j1939_tp_txtimer() won't call j1939_session_cancel() or other function
    to clear session for ENETDOWN error, this lead to mismatch of
    j1939_session_get/put() and jsk->skb_pending will never decrease to
    zero.

    To reproduce it use following commands:
    1. ip link add dev vcan0 type vcan
    2. j1939acd -r 100,80-120 1122334455667788 vcan0
    3. presses ctrl-c and thread will be blocked forever

    This patch adds check for ndev->flags in j1939_sk_bind() to avoid this
    kind of situation and return with -ENETDOWN.

    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Zhang Changzhong
    Link: https://lore.kernel.org/r/1599460308-18770-1-git-send-email-zhangchangzhong@huawei.com
    Acked-by: Oleksij Rempel
    Signed-off-by: Marc Kleine-Budde

    Zhang Changzhong
     
  • If can_init_proc() fail to create /proc/net/can directory, can_remove_proc()
    will trigger a warning:

    WARNING: CPU: 6 PID: 7133 at fs/proc/generic.c:672 remove_proc_entry+0x17b0
    Kernel panic - not syncing: panic_on_warn set ...

    Fix to return early from can_remove_proc() if can proc_dir does not exists.

    Signed-off-by: Zhang Changzhong
    Link: https://lore.kernel.org/r/1594709090-3203-1-git-send-email-zhangchangzhong@huawei.com
    Fixes: 8e8cda6d737d ("can: initial support for network namespaces")
    Acked-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Zhang Changzhong
     

16 Oct, 2020

1 commit


12 Oct, 2020

2 commits

  • As pointed out by Jakub Kicinski here:
    http://lore.kernel.org/r/20201009175751.5c54097f@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com
    this patch removes the obsolete version information of the different
    CAN protocols and the AF_CAN core module.

    Signed-off-by: Oliver Hartkopp
    Link: https://lore.kernel.org/r/20201012074354.25839-2-socketcan@hartkopp.net
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     
  • As pointed out by Jakub Kicinski here:
    http://lore.kernel.org/r/20201009175751.5c54097f@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com
    this patch addresses the remarked issues:

    - remove empty line in comment
    - remove default=y for CAN_ISOTP in Kconfig
    - make use of pr_notice_once()
    - use GFP_ATOMIC instead of gfp_any() in soft hrtimer context

    The version strings in the CAN subsystem are removed by a separate patch.

    Signed-off-by: Oliver Hartkopp
    Link: https://lore.kernel.org/r/20201012074354.25839-1-socketcan@hartkopp.net
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     

09 Oct, 2020

2 commits

  • This patch add the initialization of skbcnt, similar to:

    e009f95b1543 can: j1935: j1939_tp_tx_dat_new(): fix missing initialization of skbcnt

    Let's play save and initialize this skbcnt as well.

    Suggested-by: Jakub Kicinski
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Marc Kleine-Budde

    Marc Kleine-Budde
     
  • This fixes an uninit-value warning:
    BUG: KMSAN: uninit-value in can_receive+0x26b/0x630 net/can/af_can.c:650

    Reported-and-tested-by: syzbot+3f3837e61a48d32b495f@syzkaller.appspotmail.com
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Cc: Robin van der Gracht
    Cc: Oleksij Rempel
    Cc: Pengutronix Kernel Team
    Cc: Oliver Hartkopp
    Cc: Marc Kleine-Budde
    Signed-off-by: Cong Wang
    Link: https://lore.kernel.org/r/20201008061821.24663-1-xiyou.wangcong@gmail.com
    Signed-off-by: Marc Kleine-Budde

    Cong Wang
     

08 Oct, 2020

1 commit

  • CAN Transport Protocols offer support for segmented Point-to-Point
    communication between CAN nodes via two defined CAN Identifiers.
    As CAN frames can only transport a small amount of data bytes
    (max. 8 bytes for 'classic' CAN and max. 64 bytes for CAN FD) this
    segmentation is needed to transport longer PDUs as needed e.g. for
    vehicle diagnosis (UDS, ISO 14229) or IP-over-CAN traffic.
    This protocol driver implements data transfers according to
    ISO 15765-2:2016 for 'classic' CAN and CAN FD frame types.

    Signed-off-by: Oliver Hartkopp
    Link: https://lore.kernel.org/r/20200928200404.82229-1-socketcan@hartkopp.net
    [mkl: Removed "WITH Linux-syscall-note" from isotp.c.
    Fixed indention, a checkpatch warning and typos.
    Replaced __u{8,32} by u{8,32}.
    Removed always false (optlen < 0) check in isotp_setsockopt().]
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     

07 Oct, 2020

2 commits

  • Error queue are not yet implemented in CAN-raw sockets.

    The problem: a userland call to recvmsg(soc, msg, MSG_ERRQUEUE) on a
    CAN-raw socket would unqueue messages from the normal queue without
    any kind of error or warning. As such, it prevented CAN drivers from
    using the functionalities that relies on the error queue such as
    skb_tx_timestamp().

    SCM_CAN_RAW_ERRQUEUE is defined as the type for the CAN raw error
    queue. SCM stands for "Socket control messages". The name is inspired
    from SCM_J1939_ERRQUEUE of include/uapi/linux/can/j1939.h.

    Signed-off-by: Vincent Mailhol
    Link: https://lore.kernel.org/r/20200926162527.270030-1-mailhol.vincent@wanadoo.fr
    Acked-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Vincent Mailhol
     
  • This patch fixes the kernel doc for can_rcv_list_find() which was broken in commit:

    3ee6d2bebef8 ("can: af_can: rename find_rcv_list() to can_rcv_list_find()")

    while renaming a variable, but forgetting to rename the kernel doc, too.

    Link: http://lore.kernel.org/r/20201006203748.1750156-2-mkl@pengutronix.de
    Fixes: 3ee6d2bebef8 ("can: af_can: rename find_rcv_list() to can_rcv_list_find()")
    Signed-off-by: Marc Kleine-Budde

    Marc Kleine-Budde
     

21 Sep, 2020

3 commits


24 Aug, 2020

1 commit

  • Replace the existing /* fall through */ comments and its variants with
    the new pseudo-keyword macro fallthrough[1]. Also, remove unnecessary
    fall-through markings when it is the case.

    [1] https://www.kernel.org/doc/html/v5.7/process/deprecated.html?highlight=fallthrough#implicit-switch-case-fall-through

    Signed-off-by: Gustavo A. R. Silva

    Gustavo A. R. Silva
     

15 Aug, 2020

4 commits

  • According to SAE J1939/21 (Chapter 5.12.3 and APPENDIX C), for transmit side
    the required time interval between packets of a multipacket broadcast message
    is 50 to 200 ms, the responder shall use a timeout of 250ms (provides margin
    allowing for the maximumm spacing of 200ms). For receive side a timeout will
    occur when a time of greater than 750 ms elapsed between two message packets
    when more packets were expected.

    So this patch fix and add rxtimer for multipacket broadcast session.

    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Zhang Changzhong
    Link: https://lore.kernel.org/r/1596599425-5534-5-git-send-email-zhangchangzhong@huawei.com
    Acked-by: Oleksij Rempel
    Signed-off-by: Marc Kleine-Budde

    Zhang Changzhong
     
  • If timeout occurs, j1939_tp_rxtimer() first calls hrtimer_start() to restart
    rxtimer, and then calls __j1939_session_cancel() to set session->state =
    J1939_SESSION_WAITING_ABORT. At next timeout expiration, because of the
    J1939_SESSION_WAITING_ABORT session state j1939_tp_rxtimer() will call
    j1939_session_deactivate_activate_next() to deactivate current session, and
    rxtimer won't be set.

    But for multipacket broadcast session, __j1939_session_cancel() don't set
    session->state = J1939_SESSION_WAITING_ABORT, thus current session won't be
    deactivate and hrtimer_start() is called to start new rxtimer again and again.

    So fix it by moving session->state = J1939_SESSION_WAITING_ABORT out of if
    (!j1939_cb_is_broadcast(&session->skcb)) statement.

    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Zhang Changzhong
    Link: https://lore.kernel.org/r/1596599425-5534-4-git-send-email-zhangchangzhong@huawei.com
    Acked-by: Oleksij Rempel
    Signed-off-by: Marc Kleine-Budde

    Zhang Changzhong
     
  • If j1939_xtp_rx_dat_one() receive last frame of multipacket broadcast message,
    j1939_session_timers_cancel() should be called to cancel rxtimer.

    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Zhang Changzhong
    Link: https://lore.kernel.org/r/1596599425-5534-3-git-send-email-zhangchangzhong@huawei.com
    Acked-by: Oleksij Rempel
    Signed-off-by: Marc Kleine-Budde

    Zhang Changzhong
     
  • Currently j1939_tp_im_involved_anydir() in j1939_tp_recv() check the previously
    set flags J1939_ECU_LOCAL_DST and J1939_ECU_LOCAL_SRC of incoming skb, thus
    multipacket broadcast message was aborted by receive side because it may come
    from remote ECUs and have no exact dst address. Similarly, j1939_tp_cmd_recv()
    and j1939_xtp_rx_dat() didn't process broadcast message.

    So fix it by checking and process broadcast message in j1939_tp_recv(),
    j1939_tp_cmd_recv() and j1939_xtp_rx_dat().

    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Zhang Changzhong
    Link: https://lore.kernel.org/r/1596599425-5534-2-git-send-email-zhangchangzhong@huawei.com
    Acked-by: Oleksij Rempel
    Signed-off-by: Marc Kleine-Budde

    Zhang Changzhong
     

14 Aug, 2020

6 commits

  • Since the stack relays on receiving own packets, it was overwriting own
    transmit buffer from received packets.

    At least theoretically, the received echo buffer can be corrupt or
    changed and the session partner can request to resend previous data. In
    this case we will re-send bad data.

    With this patch we will stop to overwrite own TX buffer and use it for
    sanity checking.

    Signed-off-by: Oleksij Rempel
    Link: https://lore.kernel.org/r/20200807105200.26441-6-o.rempel@pengutronix.de
    Signed-off-by: Marc Kleine-Budde

    Oleksij Rempel
     
  • Sometimes it makes no sense to search the skb by pkt.dpo, since we need
    next the skb within the transaction block. This may happen if we have an
    ETP session with CTS set to less than 255 packets.

    After this patch, we will be able to work with ETP sessions where the
    block size (ETP.CM_CTS byte 2) is less than 255 packets.

    Reported-by: Henrique Figueira
    Reported-by: https://github.com/linux-can/can-utils/issues/228
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Oleksij Rempel
    Link: https://lore.kernel.org/r/20200807105200.26441-5-o.rempel@pengutronix.de
    Signed-off-by: Marc Kleine-Budde

    Oleksij Rempel
     
  • This patch adds check to ensure that the struct net_device::ml_priv is
    allocated, as it is used later by the j1939 stack.

    The allocation is done by all mainline CAN network drivers, but when using
    bond or team devices this is not the case.

    Bail out if no ml_priv is allocated.

    Reported-by: syzbot+f03d384f3455d28833eb@syzkaller.appspotmail.com
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Cc: linux-stable # >= v5.4
    Signed-off-by: Oleksij Rempel
    Link: https://lore.kernel.org/r/20200807105200.26441-4-o.rempel@pengutronix.de
    Signed-off-by: Marc Kleine-Budde

    Oleksij Rempel
     
  • The current stack implementation do not support ECTS requests of not
    aligned TP sized blocks.

    If ECTS will request a block with size and offset spanning two TP
    blocks, this will cause memcpy() to read beyond the queued skb (which
    does only contain one TP sized block).

    Sometimes KASAN will detect this read if the memory region beyond the
    skb was previously allocated and freed. In other situations it will stay
    undetected. The ETP transfer in any case will be corrupted.

    This patch adds a sanity check to avoid this kind of read and abort the
    session with error J1939_XTP_ABORT_ECTS_TOO_BIG.

    Reported-by: syzbot+5322482fe520b02aea30@syzkaller.appspotmail.com
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Cc: linux-stable # >= v5.4
    Signed-off-by: Oleksij Rempel
    Link: https://lore.kernel.org/r/20200807105200.26441-3-o.rempel@pengutronix.de
    Signed-off-by: Marc Kleine-Budde

    Oleksij Rempel
     
  • In current J1939 stack implementation, we process all locally send
    messages as own messages. Even if it was send by CAN_RAW socket.

    To reproduce it use following commands:
    testj1939 -P -r can0:0x80 &
    cansend can0 18238040#0123

    This step will trigger false positive not critical warning:
    j1939_simple_recv: Received already invalidated message

    With this patch we add additional check to make sure, related skb is own
    echo message.

    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Oleksij Rempel
    Link: https://lore.kernel.org/r/20200807105200.26441-2-o.rempel@pengutronix.de
    Signed-off-by: Marc Kleine-Budde

    Oleksij Rempel
     
  • syzbot found that at least 2 bytes of kernel information
    were leaked during getsockname() on AF_CAN CAN_J1939 socket.

    Since struct sockaddr_can has in fact two holes, simply
    clear the whole area before filling it with useful data.

    BUG: KMSAN: kernel-infoleak in kmsan_copy_to_user+0x81/0x90 mm/kmsan/kmsan_hooks.c:253
    CPU: 0 PID: 8466 Comm: syz-executor511 Not tainted 5.8.0-rc5-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Call Trace:
    __dump_stack lib/dump_stack.c:77 [inline]
    dump_stack+0x21c/0x280 lib/dump_stack.c:118
    kmsan_report+0xf7/0x1e0 mm/kmsan/kmsan_report.c:121
    kmsan_internal_check_memory+0x238/0x3d0 mm/kmsan/kmsan.c:423
    kmsan_copy_to_user+0x81/0x90 mm/kmsan/kmsan_hooks.c:253
    instrument_copy_to_user include/linux/instrumented.h:91 [inline]
    _copy_to_user+0x18e/0x260 lib/usercopy.c:39
    copy_to_user include/linux/uaccess.h:186 [inline]
    move_addr_to_user+0x3de/0x670 net/socket.c:237
    __sys_getsockname+0x407/0x5e0 net/socket.c:1909
    __do_sys_getsockname net/socket.c:1920 [inline]
    __se_sys_getsockname+0x91/0xb0 net/socket.c:1917
    __x64_sys_getsockname+0x4a/0x70 net/socket.c:1917
    do_syscall_64+0xad/0x160 arch/x86/entry/common.c:386
    entry_SYSCALL_64_after_hwframe+0x44/0xa9
    RIP: 0033:0x440219
    Code: Bad RIP value.
    RSP: 002b:00007ffe5ee150c8 EFLAGS: 00000246 ORIG_RAX: 0000000000000033
    RAX: ffffffffffffffda RBX: 00000000004002c8 RCX: 0000000000440219
    RDX: 0000000020000240 RSI: 0000000020000100 RDI: 0000000000000003
    RBP: 00000000006ca018 R08: 0000000000000000 R09: 00000000004002c8
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000401a20
    R13: 0000000000401ab0 R14: 0000000000000000 R15: 0000000000000000

    Local variable ----address@__sys_getsockname created at:
    __sys_getsockname+0x91/0x5e0 net/socket.c:1894
    __sys_getsockname+0x91/0x5e0 net/socket.c:1894

    Bytes 2-3 of 24 are uninitialized
    Memory access of size 24 starts at ffff8880ba2c7de8
    Data copied to user address 0000000020000100

    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Eric Dumazet
    Reported-by: syzbot
    Cc: Robin van der Gracht
    Cc: Oleksij Rempel
    Cc: Pengutronix Kernel Team
    Cc: linux-can@vger.kernel.org
    Acked-by: Oleksij Rempel
    Link: https://lore.kernel.org/r/20200813161834.4021638-1-edumazet@google.com
    Signed-off-by: Marc Kleine-Budde

    Eric Dumazet
     

25 Jul, 2020

1 commit

  • Rework the remaining setsockopt code to pass a sockptr_t instead of a
    plain user pointer. This removes the last remaining set_fs(KERNEL_DS)
    outside of architecture specific code.

    Signed-off-by: Christoph Hellwig
    Acked-by: Stefan Schmidt [ieee802154]
    Acked-by: Matthieu Baerts
    Signed-off-by: David S. Miller

    Christoph Hellwig
     

20 Jul, 2020

1 commit


14 Jul, 2020

1 commit


14 Jun, 2020

1 commit

  • Since commit 84af7a6194e4 ("checkpatch: kconfig: prefer 'help' over
    '---help---'"), the number of '---help---' has been gradually
    decreasing, but there are still more than 2400 instances.

    This commit finishes the conversion. While I touched the lines,
    I also fixed the indentation.

    There are a variety of indentation styles found.

    a) 4 spaces + '---help---'
    b) 7 spaces + '---help---'
    c) 8 spaces + '---help---'
    d) 1 space + 1 tab + '---help---'
    e) 1 tab + '---help---' (correct indentation)
    f) 1 tab + 1 space + '---help---'
    g) 1 tab + 2 spaces + '---help---'

    In order to convert all of them to 1 tab + 'help', I ran the
    following commend:

    $ find . -name 'Kconfig*' | xargs sed -i 's/^[[:space:]]*---help---/\thelp/'

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

08 Dec, 2019

1 commit

  • syzbot reproduced following crash:

    ===============================================================================
    kasan: CONFIG_KASAN_INLINE enabled
    kasan: GPF could be caused by NULL-ptr deref or user memory access
    general protection fault: 0000 [#1] PREEMPT SMP KASAN
    CPU: 0 PID: 9844 Comm: syz-executor.0 Not tainted 5.4.0-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
    Google 01/01/2011
    RIP: 0010:__lock_acquire+0x1254/0x4a00 kernel/locking/lockdep.c:3828
    Code: 00 0f 85 96 24 00 00 48 81 c4 f0 00 00 00 5b 41 5c 41 5d 41 5e 41
    5f 5d c3 48 b8 00 00 00 00 00 fc ff df 4c 89 f2 48 c1 ea 03 3c 02
    00 0f 85 0b 28 00 00 49 81 3e 20 19 78 8a 0f 84 5f ee ff
    RSP: 0018:ffff888099c3fb48 EFLAGS: 00010006
    RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000
    RDX: 0000000000000218 RSI: 0000000000000000 RDI: 0000000000000001
    RBP: ffff888099c3fc60 R08: 0000000000000001 R09: 0000000000000001
    R10: fffffbfff146e1d0 R11: ffff888098720400 R12: 00000000000010c0
    R13: 0000000000000000 R14: 00000000000010c0 R15: 0000000000000000
    FS: 00007f0559e98700(0000) GS:ffff8880ae800000(0000)
    knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fe4d89e0000 CR3: 0000000099606000 CR4: 00000000001406f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
    lock_acquire+0x190/0x410 kernel/locking/lockdep.c:4485
    __raw_spin_lock_bh include/linux/spinlock_api_smp.h:135 [inline]
    _raw_spin_lock_bh+0x33/0x50 kernel/locking/spinlock.c:175
    spin_lock_bh include/linux/spinlock.h:343 [inline]
    j1939_jsk_del+0x32/0x210 net/can/j1939/socket.c:89
    j1939_sk_bind+0x2ea/0x8f0 net/can/j1939/socket.c:448
    __sys_bind+0x239/0x290 net/socket.c:1648
    __do_sys_bind net/socket.c:1659 [inline]
    __se_sys_bind net/socket.c:1657 [inline]
    __x64_sys_bind+0x73/0xb0 net/socket.c:1657
    do_syscall_64+0xfa/0x790 arch/x86/entry/common.c:294
    entry_SYSCALL_64_after_hwframe+0x49/0xbe
    RIP: 0033:0x45a679
    Code: ad b6 fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 48 89 f8 48 89
    f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 3d 01
    f0 ff ff 0f 83 7b b6 fb ff c3 66 2e 0f 1f 84 00 00 00 00
    RSP: 002b:00007f0559e97c78 EFLAGS: 00000246 ORIG_RAX: 0000000000000031
    RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 000000000045a679
    RDX: 0000000000000018 RSI: 0000000020000240 RDI: 0000000000000003
    RBP: 000000000075bf20 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 00007f0559e986d4
    R13: 00000000004c09e9 R14: 00000000004d37d0 R15: 00000000ffffffff
    Modules linked in:
    ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 9844 at kernel/locking/mutex.c:1419
    mutex_trylock+0x279/0x2f0 kernel/locking/mutex.c:1427
    ===============================================================================

    This issues was caused by null pointer deference. Where j1939_sk_bind()
    was using currently not existing priv.

    Possible scenario may look as following:
    cpu0 cpu1
    bind()
    bind()
    j1939_sk_bind()
    j1939_sk_bind()
    priv = jsk->priv;
    priv = jsk->priv;
    lock_sock(sock->sk);
    priv = j1939_netdev_start(ndev);
    j1939_jsk_add(priv, jsk);
    jsk->priv = priv;
    relase_sock(sock->sk);
    lock_sock(sock->sk);
    j1939_jsk_del(priv, jsk);
    ..... ooops ......

    With this patch we move "priv = jsk->priv;" after the lock, to avoid
    assigning of wrong priv pointer.

    Reported-by: syzbot+99e9e1b200a1e363237d@syzkaller.appspotmail.com
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Oleksij Rempel
    Cc: linux-stable # >= v5.4
    Signed-off-by: Marc Kleine-Budde

    Oleksij Rempel
     

13 Nov, 2019

3 commits

  • j1939_session_destroy() and __j1939_priv_release() should be called only
    if session, ecu or socket are not linked or used by any one else. If at
    least one of these resources is linked, then the reference counting is
    broken somewhere.

    This warning will be triggered before KASAN will do, and will make it
    easier to debug initial issue. This works on platforms without KASAN
    support.

    Signed-off-by: Oleksij Rempel

    Oleksij Rempel
     
  • j1939_can_recv() can be called in parallel with socket release. In this
    case sk_release and sk_destruct can be done earlier than
    j1939_can_recv() is processed.

    Reported-by: syzbot+ca172a0ac477ac90f045@syzkaller.appspotmail.com
    Reported-by: syzbot+07ca5bce8530070a5650@syzkaller.appspotmail.com
    Reported-by: syzbot+a47537d3964ef6c874e1@syzkaller.appspotmail.com
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Oleksij Rempel

    Oleksij Rempel
     
  • …) instead of hrtimer_cancel()

    This part of the code protected by lock used in the hrtimer as well.
    Using hrtimer_cancel() will trigger dead lock.

    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>

    Oleksij Rempel