08 Jun, 2019

2 commits

  • CAN supports software tx timestamps as of the below commit. Purge
    any queued timestamp packets on socket destroy.

    Fixes: 51f31cabe3ce ("ip: support for TX timestamps on UDP and RAW sockets")
    Reported-by: syzbot+a90604060cb40f5bdd16@syzkaller.appspotmail.com
    Signed-off-by: Willem de Bruijn
    Cc: linux-stable
    Signed-off-by: Marc Kleine-Budde

    Willem de Bruijn
     
  • This patch add error path for can_init() to avoid possible crash if some
    error occurs.

    Fixes: 0d66548a10cb ("[CAN]: Add PF_CAN core module")
    Signed-off-by: YueHaibing
    Acked-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    YueHaibing
     

20 Apr, 2019

1 commit

  • The SIOCGSTAMP/SIOCGSTAMPNS ioctl commands are implemented by many
    socket protocol handlers, and all of those end up calling the same
    sock_get_timestamp()/sock_get_timestampns() helper functions, which
    results in a lot of duplicate code.

    With the introduction of 64-bit time_t on 32-bit architectures, this
    gets worse, as we then need four different ioctl commands in each
    socket protocol implementation.

    To simplify that, let's add a new .gettstamp() operation in
    struct proto_ops, and move ioctl implementation into the common
    sock_ioctl()/compat_sock_ioctl_trans() functions that these all go
    through.

    We can reuse the sock_get_timestamp() implementation, but generalize
    it so it can deal with both native and compat mode, as well as
    timeval and timespec structures.

    Acked-by: Stefan Schmidt
    Acked-by: Neil Horman
    Acked-by: Marc Kleine-Budde
    Link: https://lore.kernel.org/lkml/CAK8P3a038aDQQotzua_QtKGhq8O9n+rdiz2=WDCp82ys8eUT+A@mail.gmail.com/
    Signed-off-by: Arnd Bergmann
    Acked-by: Willem de Bruijn
    Signed-off-by: David S. Miller

    Arnd Bergmann
     

28 Mar, 2018

1 commit


27 Mar, 2018

1 commit

  • Prefer the direct use of octal for permissions.

    Done with checkpatch -f --types=SYMBOLIC_PERMS --fix-inplace
    and some typing.

    Miscellanea:

    o Whitespace neatening around these conversions.

    Signed-off-by: Joe Perches
    Signed-off-by: David S. Miller

    Joe Perches
     

22 Mar, 2018

1 commit

  • These pernet_operations create and destroy /proc entries
    and cancel per-net timer.

    Also, there are unneed iterations over empty list of net
    devices, since all net devices must be already moved
    to init_net or unregistered by default_device_ops. This
    already was mentioned here:

    https://marc.info/?l=linux-can&m=150169589119335&w=2

    So, it looks safe to make them async.

    Signed-off-by: Kirill Tkhai
    Signed-off-by: David S. Miller

    Kirill Tkhai
     

20 Jan, 2018

1 commit


18 Jan, 2018

2 commits

  • If an invalid CANFD frame is received, from a driver or from a tun
    interface, a Kernel warning is generated.

    This patch replaces the WARN_ONCE by a simple pr_warn_once, so that a
    kernel, bootet with panic_on_warn, does not panic. A printk seems to be
    more appropriate here.

    Reported-by: syzbot+e3b775f40babeff6e68b@syzkaller.appspotmail.com
    Suggested-by: Dmitry Vyukov
    Acked-by: Oliver Hartkopp
    Cc: linux-stable
    Signed-off-by: Marc Kleine-Budde

    Marc Kleine-Budde
     
  • If an invalid CAN frame is received, from a driver or from a tun
    interface, a Kernel warning is generated.

    This patch replaces the WARN_ONCE by a simple pr_warn_once, so that a
    kernel, bootet with panic_on_warn, does not panic. A printk seems to be
    more appropriate here.

    Reported-by: syzbot+4386709c0c1284dca827@syzkaller.appspotmail.com
    Suggested-by: Dmitry Vyukov
    Acked-by: Oliver Hartkopp
    Cc: linux-stable
    Signed-off-by: Marc Kleine-Budde

    Marc Kleine-Budde
     

05 Jan, 2018

1 commit


22 Oct, 2017

1 commit

  • There were quite a few overlapping sets of changes here.

    Daniel's bug fix for off-by-ones in the new BPF branch instructions,
    along with the added allowances for "data_end > ptr + x" forms
    collided with the metadata additions.

    Along with those three changes came veritifer test cases, which in
    their final form I tried to group together properly. If I had just
    trimmed GIT's conflict tags as-is, this would have split up the
    meta tests unnecessarily.

    In the socketmap code, a set of preemption disabling changes
    overlapped with the rename of bpf_compute_data_end() to
    bpf_compute_data_pointers().

    Changes were made to the mv88e6060.c driver set addr method
    which got removed in net-next.

    The hyperv transport socket layer had a locking change in 'net'
    which overlapped with a change of socket state macro usage
    in 'net-next'.

    Signed-off-by: David S. Miller

    David S. Miller
     

19 Oct, 2017

2 commits

  • This patch adds the missing check and error handling for out-of-memory
    situations, when kzalloc cannot allocate memory.

    Fixes: cb5635a36776 ("can: complete initial namespace support")
    Acked-by: Oliver Hartkopp
    Cc: linux-stable
    Signed-off-by: Marc Kleine-Budde

    Marc Kleine-Budde
     
  • "proto_tab" is a RCU protected array, when directly accessing the array,
    sparse throws these warnings:

    CHECK /srv/work/frogger/socketcan/linux/net/can/af_can.c
    net/can/af_can.c:115:14: error: incompatible types in comparison expression (different address spaces)
    net/can/af_can.c:795:17: error: incompatible types in comparison expression (different address spaces)
    net/can/af_can.c:816:9: error: incompatible types in comparison expression (different address spaces)

    This patch fixes the problem by using rcu_access_pointer() and
    annotating "proto_tab" array as __rcu.

    Signed-off-by: Marc Kleine-Budde

    Marc Kleine-Budde
     

18 Oct, 2017

1 commit

  • In preparation for unconditionally passing the struct timer_list pointer to
    all timer callbacks, switch to using the new timer_setup() and from_timer()
    to pass the timer pointer explicitly.

    Cc: Oliver Hartkopp
    Cc: Marc Kleine-Budde
    Cc: "David S. Miller"
    Cc: linux-can@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Signed-off-by: Kees Cook
    Signed-off-by: David S. Miller

    Kees Cook
     

09 Jun, 2017

1 commit

  • This patch uses spin_lock_init() instead of __SPIN_LOCK_UNLOCKED() to
    initialize the per namespace net->can.can_rcvlists_lock lock to fix this
    lockdep warning:

    | INFO: trying to register non-static key.
    | the code is fine but needs lockdep annotation.
    | turning off the locking correctness validator.
    | CPU: 0 PID: 186 Comm: candump Not tainted 4.12.0-rc3+ #47
    | Hardware name: Marvell Kirkwood (Flattened Device Tree)
    | [] (unwind_backtrace) from [] (show_stack+0x18/0x1c)
    | [] (show_stack) from [] (register_lock_class+0x1e4/0x55c)
    | [] (register_lock_class) from [] (__lock_acquire+0x148/0x1990)
    | [] (__lock_acquire) from [] (lock_acquire+0x174/0x210)
    | [] (lock_acquire) from [] (_raw_spin_lock+0x50/0x88)
    | [] (_raw_spin_lock) from [] (can_rx_register+0x94/0x15c [can])
    | [] (can_rx_register [can]) from [] (raw_enable_filters+0x60/0xc0 [can_raw])
    | [] (raw_enable_filters [can_raw]) from [] (raw_enable_allfilters+0x2c/0xa0 [can_raw])
    | [] (raw_enable_allfilters [can_raw]) from [] (raw_bind+0xb0/0x250 [can_raw])
    | [] (raw_bind [can_raw]) from [] (SyS_bind+0x70/0xac)
    | [] (SyS_bind) from [] (ret_fast_syscall+0x0/0x1c)

    Cc: Mario Kicherer
    Acked-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Marc Kleine-Budde
     

25 Apr, 2017

3 commits


04 Apr, 2017

1 commit

  • This patch adds initial support for network namespaces. The changes only
    enable support in the CAN raw, proc and af_can code. GW and BCM still
    have their checks that ensure that they are used only from the main
    namespace.

    The patch boils down to moving the global structures, i.e. the global
    filter list and their /proc stats, into a per-namespace structure and passing
    around the corresponding "struct net" in a lot of different places.

    Changes since v1:
    - rebased on current HEAD (2bfe01e)
    - fixed overlong line

    Signed-off-by: Mario Kicherer
    Signed-off-by: Marc Kleine-Budde

    Mario Kicherer
     

30 Jan, 2017

1 commit

  • Zhang Yanmin reported crashes [1] and provided a patch adding a
    synchronize_rcu() call in can_rx_unregister()

    The main problem seems that the sockets themselves are not RCU
    protected.

    If CAN uses RCU for delivery, then sockets should be freed only after
    one RCU grace period.

    Recent kernels could use sock_set_flag(sk, SOCK_RCU_FREE), but let's
    ease stable backports with the following fix instead.

    [1]
    BUG: unable to handle kernel NULL pointer dereference at (null)
    IP: [] selinux_socket_sock_rcv_skb+0x65/0x2a0

    Call Trace:

    [] security_sock_rcv_skb+0x4c/0x60
    [] sk_filter+0x41/0x210
    [] sock_queue_rcv_skb+0x53/0x3a0
    [] raw_rcv+0x2a3/0x3c0
    [] can_rcv_filter+0x12b/0x370
    [] can_receive+0xd9/0x120
    [] can_rcv+0xab/0x100
    [] __netif_receive_skb_core+0xd8c/0x11f0
    [] __netif_receive_skb+0x24/0xb0
    [] process_backlog+0x127/0x280
    [] net_rx_action+0x33b/0x4f0
    [] __do_softirq+0x184/0x440
    [] do_softirq_own_stack+0x1c/0x30

    [] do_softirq.part.18+0x3b/0x40
    [] do_softirq+0x1d/0x20
    [] netif_rx_ni+0xe5/0x110
    [] slcan_receive_buf+0x507/0x520
    [] flush_to_ldisc+0x21c/0x230
    [] process_one_work+0x24f/0x670
    [] worker_thread+0x9d/0x6f0
    [] ? rescuer_thread+0x480/0x480
    [] kthread+0x12c/0x150
    [] ret_from_fork+0x3f/0x70

    Reported-by: Zhang Yanmin
    Signed-off-by: Eric Dumazet
    Acked-by: Oliver Hartkopp
    Signed-off-by: David S. Miller

    Eric Dumazet
     

23 Jun, 2016

1 commit

  • The change to leave out procfs support in CAN when CONFIG_PROC_FS
    is not set was incomplete and leads to a build error:

    net/built-in.o: In function `can_init':
    :(.init.text+0x9858): undefined reference to `can_stat_update'
    ERROR: "can_stat_update" [net/can/can.ko] undefined!

    This tries a better approach, encapsulating all of the calls
    within IS_ENABLED(), so we also leave out the timer function
    from the object file.

    Signed-off-by: Arnd Bergmann
    Fixes: a20fadf85312 ("can: build proc support only if CONFIG_PROC_FS is activated")
    Signed-off-by: Marc Kleine-Budde

    Arnd Bergmann
     

13 Jul, 2015

1 commit

  • Commit 514ac99c64b "can: fix multiple delivery of a single CAN frame for
    overlapping CAN filters" requires the skb->tstamp to be set to check for
    identical CAN skbs.

    Without timestamping to be required by user space applications this timestamp
    was not generated which lead to commit 36c01245eb8 "can: fix loss of CAN frames
    in raw_rcv" - which forces the timestamp to be set in all CAN related skbuffs
    by introducing several __net_timestamp() calls.

    This forces e.g. out of tree drivers which are not using alloc_can{,fd}_skb()
    to add __net_timestamp() after skbuff creation to prevent the frame loss fixed
    in mainline Linux.

    This patch removes the timestamp dependency and uses an atomic counter to
    create an unique identifier together with the skbuff pointer.

    Btw: the new skbcnt element introduced in struct can_skb_priv has to be
    initialized with zero in out-of-tree drivers which are not using
    alloc_can{,fd}_skb() too.

    Signed-off-by: Oliver Hartkopp
    Cc: linux-stable
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     

24 Jun, 2015

1 commit


22 Jun, 2015

1 commit

  • As reported by Manfred Schlaegl here

    http://marc.info/?l=linux-netdev&m=143482089824232&w=2

    commit 514ac99c64b "can: fix multiple delivery of a single CAN frame for
    overlapping CAN filters" requires the skb->tstamp to be set to check for
    identical CAN skbs.

    As net timestamping is influenced by several players (netstamp_needed and
    netdev_tstamp_prequeue) Manfred missed a proper timestamp which leads to
    CAN frame loss.

    As skb timestamping became now mandatory for CAN related skbs this patch
    makes sure that received CAN skbs always have a proper timestamp set.
    Maybe there's a better solution in the future but this patch fixes the
    CAN frame loss so far.

    Reported-by: Manfred Schlaegl
    Signed-off-by: Oliver Hartkopp
    Cc: linux-stable
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     

11 May, 2015

1 commit


09 Mar, 2015

1 commit

  • When accessing CAN network interfaces with AF_PACKET sockets e.g. by dhclient
    this can lead to a skb_under_panic due to missing skb initialisations.

    Add the missing initialisations at the CAN skbuff creation times on driver
    level (rx path) and in the network layer (tx path).

    Reported-by: Austin Schuh
    Reported-by: Daniel Steer
    Signed-off-by: Oliver Hartkopp
    Cc: linux-stable
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     

08 Dec, 2014

2 commits

  • Fix various spelling errors in the comments of the CAN modules.

    Signed-off-by: Jeremiah Mahler
    Acked-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Jeremiah Mahler
     
  • Several CAN modules use a design pattern with a banner[] variable at the
    top which defines a string that is used once during init to print the
    banner. The string is also embedded with KERN_INFO which makes it
    printk() specific.

    Improve the code by eliminating the banner[] variable and moving the
    string to where it is printed. Then switch from printk(KERN_INFO to
    pr_info() for the lines that were changed.

    Signed-off-by: Jeremiah Mahler
    Acked-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Jeremiah Mahler
     

19 May, 2014

1 commit

  • In contrast to the direct access to the single SFF frame filters (which are
    indexed by the SFF CAN ID itself) the single EFF frame filters are arranged
    in a single linked hlist. To reduce the hlist traversal in the case of many
    filter subscriptions a hash based access is introduced for single EFF filters.

    Signed-off-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     

31 Jan, 2014

1 commit

  • Self generated skbuffs in net/can/bcm.c are setting a skb->sk reference but
    no explicit destructor which is enforced since Linux 3.11 with commit
    376c7311bdb6 (net: add a temporary sanity check in skb_orphan()).

    This patch adds some helper functions to make sure that a destructor is
    properly defined when a sock reference is assigned to a CAN related skb.
    To create an unshared skb owned by the original sock a common helper function
    has been introduced to replace open coded functions to create CAN echo skbs.

    Signed-off-by: Oliver Hartkopp
    Tested-by: Andre Naujoks
    Reviewed-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Oliver Hartkopp
     

14 Oct, 2013

1 commit


29 May, 2013

1 commit

  • So far, only net_device * could be passed along with netdevice notifier
    event. This patch provides a possibility to pass custom structure
    able to provide info that event listener needs to know.

    Signed-off-by: Jiri Pirko

    v2->v3: fix typo on simeth
    shortened dev_getter
    shortened notifier_info struct name
    v1->v2: fix notifier_call parameter in call_netdevice_notifier()
    Signed-off-by: David S. Miller

    Jiri Pirko
     

19 Mar, 2013

1 commit

  • The rework of the kernel hlist implementation "hlist: drop the node parameter
    from iterators" (b67bfe0d42cac56c512dd5da4b1b347a23f4b70a) created some
    fallout in the form of non matching comments and obsolete code.

    Additionally to the cleanup this patch adds a WARN() statement to catch the
    caller of the wrong filter removal request.

    Signed-off-by: Oliver Hartkopp
    Signed-off-by: David S. Miller

    Oliver Hartkopp
     

11 Mar, 2013

1 commit


28 Feb, 2013

1 commit

  • I'm not sure why, but the hlist for each entry iterators were conceived

    list_for_each_entry(pos, head, member)

    The hlist ones were greedy and wanted an extra parameter:

    hlist_for_each_entry(tpos, pos, head, member)

    Why did they need an extra pos parameter? I'm not quite sure. Not only
    they don't really need it, it also prevents the iterator from looking
    exactly like the list iterator, which is unfortunate.

    Besides the semantic patch, there was some manual work required:

    - Fix up the actual hlist iterators in linux/list.h
    - Fix up the declaration of other iterators based on the hlist ones.
    - A very small amount of places were using the 'node' parameter, this
    was modified to use 'obj->member' instead.
    - Coccinelle didn't handle the hlist_for_each_entry_safe iterator
    properly, so those had to be fixed up manually.

    The semantic patch which is mostly the work of Peter Senna Tschudin is here:

    @@
    iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;

    type T;
    expression a,c,d,e;
    identifier b;
    statement S;
    @@

    -T b;

    [akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]
    [akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]
    [akpm@linux-foundation.org: checkpatch fixes]
    [akpm@linux-foundation.org: fix warnings]
    [akpm@linux-foudnation.org: redo intrusive kvm changes]
    Tested-by: Peter Senna Tschudin
    Acked-by: Paul E. McKenney
    Signed-off-by: Sasha Levin
    Cc: Wu Fengguang
    Cc: Marcelo Tosatti
    Cc: Gleb Natapov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sasha Levin
     

06 Oct, 2012

1 commit


20 Jun, 2012

2 commits

  • - handle ETH_P_CAN and ETH_P_CANFD skbuffs
    - update sanity checks for CAN and CAN FD
    - make sure the CAN frame can pass the selected CAN netdevice on send
    - bump core version and abi version to indicate the new CAN FD support

    Signed-off-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     
  • - add new struct canfd_frame
    - check identical element offsets in struct can_frame and struct canfd_frame
    - new ETH_P_CANFD definition to tag CAN FD skbs correctly
    - add CAN_MTU and CANFD_MTU definitions for easy frame and mode detection
    - add CAN[FD]_MAX_[DLC|DLEN] helper constants to remove hard coded values
    - update existing struct can_frame with helper constants and comments

    Signed-off-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     

24 May, 2012

1 commit

  • As Heinz-Juergen Oertel pointed out 'CAN error frames' are a already defined
    term for the CAN protocol violation indication on the wire.

    To avoid confusion with the error messages created by CAN drivers available
    via CAN RAW sockets update the documentation and change the naming from
    'error frames' to 'error messages' or 'error message frames'.

    Signed-off-by: Oliver Hartkopp
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     

18 Oct, 2011

1 commit