13 Jan, 2012

1 commit

  • commit a9b3cd7f32 (rcu: convert uses of rcu_assign_pointer(x, NULL) to
    RCU_INIT_POINTER) did a lot of incorrect changes, since it did a
    complete conversion of rcu_assign_pointer(x, y) to RCU_INIT_POINTER(x,
    y).

    We miss needed barriers, even on x86, when y is not NULL.

    Signed-off-by: Eric Dumazet
    CC: Stephen Hemminger
    CC: Paul E. McKenney
    Signed-off-by: David S. Miller

    Eric Dumazet
     

19 Nov, 2011

1 commit


01 Nov, 2011

2 commits


02 Aug, 2011

1 commit

  • When assigning a NULL value to an RCU protected pointer, no barrier
    is needed. The rcu_assign_pointer, used to handle that but will soon
    change to not handle the special case.

    Convert all rcu_assign_pointer of NULL value.

    //smpl
    @@ expression P; @@

    - rcu_assign_pointer(P, NULL)
    + RCU_INIT_POINTER(P, NULL)

    //

    Signed-off-by: Stephen Hemminger
    Acked-by: Paul E. McKenney
    Signed-off-by: David S. Miller

    Stephen Hemminger
     

10 Jun, 2011

1 commit

  • The message size allocated for rtnl ifinfo dumps was limited to
    a single page. This is not enough for additional interface info
    available with devices that support SR-IOV and caused a bug in
    which VF info would not be displayed if more than approximately
    40 VFs were created per interface.

    Implement a new function pointer for the rtnl_register service that will
    calculate the amount of data required for the ifinfo dump and allocate
    enough data to satisfy the request.

    Signed-off-by: Greg Rose
    Signed-off-by: Jeff Kirsher

    Greg Rose
     

24 May, 2011

1 commit

  • The %pK format specifier is designed to hide exposed kernel pointers,
    specifically via /proc interfaces. Exposing these pointers provides an
    easy target for kernel write vulnerabilities, since they reveal the
    locations of writable structures containing easily triggerable function
    pointers. The behavior of %pK depends on the kptr_restrict sysctl.

    If kptr_restrict is set to 0, no deviation from the standard %p behavior
    occurs. If kptr_restrict is set to 1, the default, if the current user
    (intended to be a reader via seq_printf(), etc.) does not have CAP_SYSLOG
    (currently in the LSM tree), kernel pointers using %pK are printed as 0's.
    If kptr_restrict is set to 2, kernel pointers using %pK are printed as
    0's regardless of privileges. Replacing with 0's was chosen over the
    default "(null)", which cannot be parsed by userland %p, which expects
    "(nil)".

    The supporting code for kptr_restrict and %pK are currently in the -mm
    tree. This patch converts users of %p in net/ to %pK. Cases of printing
    pointers to the syslog are not covered, since this would eliminate useful
    information for postmortem debugging and the reading of the syslog is
    already optionally protected by the dmesg_restrict sysctl.

    Signed-off-by: Dan Rosenberg
    Cc: James Morris
    Cc: Eric Dumazet
    Cc: Thomas Graf
    Cc: Eugene Teo
    Cc: Kees Cook
    Cc: Ingo Molnar
    Cc: David S. Miller
    Cc: Peter Zijlstra
    Cc: Eric Paris
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Dan Rosenberg
     

21 May, 2011

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1446 commits)
    macvlan: fix panic if lowerdev in a bond
    tg3: Add braces around 5906 workaround.
    tg3: Fix NETIF_F_LOOPBACK error
    macvlan: remove one synchronize_rcu() call
    networking: NET_CLS_ROUTE4 depends on INET
    irda: Fix error propagation in ircomm_lmp_connect_response()
    irda: Kill set but unused variable 'bytes' in irlan_check_command_param()
    irda: Kill set but unused variable 'clen' in ircomm_connect_indication()
    rxrpc: Fix set but unused variable 'usage' in rxrpc_get_transport()
    be2net: Kill set but unused variable 'req' in lancer_fw_download()
    irda: Kill set but unused vars 'saddr' and 'daddr' in irlan_provider_connect_indication()
    atl1c: atl1c_resume() is only used when CONFIG_PM_SLEEP is defined.
    rxrpc: Fix set but unused variable 'usage' in rxrpc_get_peer().
    rxrpc: Kill set but unused variable 'local' in rxrpc_UDP_error_handler()
    rxrpc: Kill set but unused variable 'sp' in rxrpc_process_connection()
    rxrpc: Kill set but unused variable 'sp' in rxrpc_rotate_tx_window()
    pkt_sched: Kill set but unused variable 'protocol' in tc_classify()
    isdn: capi: Use pr_debug() instead of ifdefs.
    tg3: Update version to 3.119
    tg3: Apply rx_discards fix to 5719/5720
    ...

    Fix up trivial conflicts in arch/x86/Kconfig and net/mac80211/agg-tx.c
    as per Davem.

    Linus Torvalds
     

08 May, 2011

1 commit


03 May, 2011

1 commit

  • Four years ago, Patrick made a change to hold rtnl mutex during netlink
    dump callbacks.

    I believe it was a wrong move. This slows down concurrent dumps, making
    good old /proc/net/ files faster than rtnetlink in some situations.

    This occurred to me because one "ip link show dev ..." was _very_ slow
    on a workload adding/removing network devices in background.

    All dump callbacks are able to use RCU locking now, so this patch does
    roughly a revert of commits :

    1c2d670f366 : [RTNETLINK]: Hold rtnl_mutex during netlink dump callbacks
    6313c1e0992 : [RTNETLINK]: Remove unnecessary locking in dump callbacks

    This let writers fight for rtnl mutex and readers going full speed.

    It also takes care of phonet : phonet_route_get() is now called from rcu
    read section. I renamed it to phonet_route_get_rcu()

    Signed-off-by: Eric Dumazet
    Cc: Patrick McHardy
    Cc: Remi Denis-Courmont
    Acked-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Eric Dumazet
     

15 Apr, 2011

1 commit


16 Mar, 2011

1 commit


10 Mar, 2011

8 commits

  • This is now a run-time choice so that a single kernel can support both
    old and new generation ISI modems. Support for manually enabling the
    pipe flow is removed as it did not work properly, does not fit well
    with the socket API, and I am not aware of any use at the moment.

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     
  • This provides support for newer ISI modems with no need for the
    earlier experimental compile-time alternative choice. With this,
    we can now use the same kernel and userspace with both types of
    modems.

    This also avoids confusing two different and incompatible state
    machines, actively connected vs accepted sockets, and adds
    connection response error handling (processing "SYN/RST" of sorts).

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     
  • User-space sometimes needs this information. In particular, the GPRS
    context or the AT commands pipe setups may use the pipe handle as a
    reference.

    This removes the settable pipe handle with CONFIG_PHONET_PIPECTRLR.
    It did not handle error cases correctly. Furthermore, the kernel
    *could* implement a smart scheme for allocating handles (if ever
    needed), but userspace really cannot.

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     
  • This moves most of the accept logic to process context like other
    socket stacks do. Then we can use a few more common socket helpers
    and simplify a bit.

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     
  • With the addition of the pipe controller, there is now quite a bit
    of repetitive code for small signaling messages. Lets factor it.

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     
  • In some cases, the Phonet pipe backlog callbacks returned negative
    errno instead of NET_RX_* values.

    In other cases, NET_RX_DROP was returned for invalid packets, even
    though it seems only intended for buffering problems (not for
    deliberately discarded packets).

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     
  • Phonet assumes that packets are never dropped. We try our best to
    avoid this situation. But lets return ENOBUFS if queueing to the
    network device fails so that the caller knows things went wrong.

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     
  • The previous Phonet patch series introduced per-socket implicit
    destination (i.e. connect()). In that case, the destination
    socket address is NULL in the transmit function.
    However commit a8059512b120362b15424f152b2548fe8b11bd0c
    ("Phonet: implement per-socket destination/peer address")
    is incomplete and would trigger a NULL dereference.
    (Fortunately, the code is not in released kernel, and in fact
    currently not reachable.)

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     

26 Feb, 2011

7 commits


11 Jan, 2011

1 commit

  • Dan Rosenberg pointed out that there were some signed comparison bugs
    in the phonet protocol.

    http://marc.info/?l=full-disclosure&m=129424528425330&w=2

    The problem is that we check for array overflows but "protocol" is
    signed and we don't check for array underflows. If you have already
    have CAP_SYS_ADMIN then you could use the bugs to get root, or someone
    could cause an oops by mistake.

    Signed-off-by: Dan Carpenter
    Acked-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Dan Carpenter
     

23 Nov, 2010

1 commit


20 Oct, 2010

1 commit


14 Oct, 2010

1 commit

  • Based on suggestion by Rémi Denis-Courmont to implement 'connect'
    for Pipe controller logic, this patch implements 'connect' socket
    call for the Pipe controller logic.
    The patch does following:-
    - Removes setsockopts for PNPIPE_CREATE and PNPIPE_DESTROY
    - Adds setsockopt for setting the Pipe handle value
    - Implements connect socket call
    - Updates the Pipe controller logic

    User-space should now follow below sequence with Pipe controller:-
    -socket
    -bind
    -setsockopt for PNPIPE_PIPE_HANDLE
    -connect
    -setsockopt for PNPIPE_ENCAP_IP
    -setsockopt for PNPIPE_ENABLE

    GPRS/3G data has been tested working fine with this.

    Signed-off-by: Kumar Sanghvi
    Acked-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Kumar Sanghvi
     

09 Oct, 2010

3 commits

  • There are a bunch of issues that need to be fixed, including:
    - GFP_KERNEL allocations from atomic context
    (and GFP_ATOMIC in process context),
    - abuse of the setsockopt() call convention,
    - unprotected/unlocked static variables...

    IMHO, we will need to alter the userspace ABI when we fix it. So mark
    the configuration option as EXPERIMENTAL for the time being (or should
    it be BROKEN instead?).

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     
  • The current code works like this:

    int garbage, status;
    socklen_t len = sizeof(status);

    /* enable pipe */
    setsockopt(fd, SOL_PNPIPE, PNPIPE_ENABLE, &garbage, sizeof(garbage));
    /* disable pipe */
    setsockopt(fd, SOL_PNPIPE, PNPIPE_DISABLE, &garbage, sizeof(garbage));
    /* get status */
    getsockopt(fd, SOL_PNPIPE, PNPIPE_INQ, &status, &len);

    ...which does not follow the usual socket option pattern. This patch
    merges all three "options" into a single gettable&settable option,
    before Linux 2.6.37 gets out:

    int status;
    socklen_t len = sizeof(status);

    /* enable pipe */
    status = 1;
    setsockopt(fd, SOL_PNPIPE, PNPIPE_ENABLE, &status, sizeof(status));
    /* disable pipe */
    status = 0;
    setsockopt(fd, SOL_PNPIPE, PNPIPE_ENABLE, &status, sizeof(status));
    /* get status */
    getsockopt(fd, SOL_PNPIPE, PNPIPE_ENABLE, &status, &len);

    This also fixes the error code from EFAULT to ENOTCONN.

    Signed-off-by: Rémi Denis-Courmont
    Cc: Kumar Sanghvi
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     
  • As it currently is, the new code path is not compatible with existing
    Nokia modems. This would break existing userspace for Nokia modem, such
    as the existing oFono ISI driver.

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     

05 Oct, 2010

1 commit


01 Oct, 2010

1 commit

  • This patch restores the below flow control patch submitted by Rémi
    Denis-Courmont, which accidentaly got lost due to Pipe controller patch
    on Phonet.

    commit 1a98214feef2221cd7c24b17cd688a5a9d85b2ea
    Author: Rémi Denis-Courmont
    Date: Mon Aug 30 12:57:03 2010 +0000

    Phonet: restore flow control credits when sending fails

    Signed-off-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Signed-off-by: Kumar Sanghvi
    Acked-by: Linus Walleij
    Signed-off-by: David S. Miller

    Rémi Denis-Courmont
     

30 Sep, 2010

1 commit

  • Retrieve the header after doing pskb_may_pull since, pskb_may_pull
    could change the buffer structure.

    This is based on the comment given by Eric Dumazet on Phonet
    Pipe controller patch for a similar problem.

    Signed-off-by: Kumar Sanghvi
    Acked-by: Linus Walleij
    Acked-by: Eric Dumazet
    Acked-by: Rémi Denis-Courmont
    Signed-off-by: David S. Miller

    Kumar Sanghvi
     

28 Sep, 2010

1 commit

  • Phonet stack assumes the presence of Pipe Controller, either in Modem or
    on Application Processing Engine user-space for the Pipe data.
    Nokia Slim Modems like WG2.5 used in ST-Ericsson U8500 platform do not
    implement Pipe controller in them.
    This patch adds Pipe Controller implemenation to Phonet stack to support
    Pipe data over Phonet stack for Nokia Slim Modems.

    Signed-off-by: Kumar Sanghvi
    Acked-by: Linus Walleij
    Signed-off-by: David S. Miller

    Kumar Sanghvi
     

16 Sep, 2010

2 commits