linux/drivers
Chia-chi Yeh c54f674c65 net: PPPoPNS and PPPoLAC fixes.
net: Fix a bitmask in PPPoPNS and rename constants in PPPoPNS and PPPoLAC.

Signed-off-by: Chia-chi Yeh <chiachi@android.com>

net: Fix a potential deadlock while releasing PPPoLAC/PPPoPNS socket.

PPP driver guarantees that no thread will be executing start_xmit() after
returning from ppp_unregister_channel(). To achieve this, a spinlock (downl)
is used. In pppolac_release(), ppp_unregister_channel() is called after sk_udp
is locked. At the same time, another thread might be running in pppolac_xmit()
with downl. Thus a deadlock will occur if the thread tries to lock sk_udp.
The same situation might happen on sk_raw in pppopns_release().

Signed-off-by: Chia-chi Yeh <chiachi@android.com>

net: Force PPPoLAC and PPPoPNS to bind an interface before creating PPP channel.

It is common to manipulate the routing table after configuring PPP device.
Since both PPPoLAC and PPPoPNS run over IP, care must be taken to make sure
that there is no loop in the routing table.
Although this can be done by adding a host route, it might still cause
problems when the interface is down for some reason.

To solve this, this patch forces both drivers to bind an interface before
creating PPP channel, so the system will not re-route the tunneling sockets
to another interface when the original one is down. Another benefit is that
now the host route is no longer required, so there is no need to remove it
when PPP channel is closed.

Signed-off-by: Chia-chi Yeh <chiachi@android.com>

net: Avoid sleep-inside-spinlock in PPPoLAC and PPPoPNS.

Since recv() and xmit() are called with a spinlock held, routines which might
sleep cannot be used. This issue is solved by following changes:

Incoming packets are now processed in backlog handler, recv_core(), instead of
recv(). Since backlog handler is always executed with socket spinlock held, the
requirement of ppp_input() is still satisfied.

Outgoing packets are now processed in workqueue handler, xmit_core(), instead of
xmit(). Note that kernel_sendmsg() is no longer used to prevent touching dead
sockets.

In release(), lock_sock() and pppox_unbind_sock() ensure that no thread is in
recv_core() or xmit(). Then socket handlers are restored before release_sock(),
so no packets will leak in backlog queue.

Signed-off-by: Chia-chi Yeh <chiachi@android.com>

net: Fix msg_iovlen in PPPoLAC and PPPoPNS.

Although any positive value should work (which is always true in both drivers),
the correct value should be 1.

Signed-off-by: Chia-chi Yeh <chiachi@android.com>
2012-04-09 13:57:47 -07:00
..
accessibility
acpi Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2012-04-06 19:56:04 -07:00
amba
ata 1) AHCI regression fix. A recent "make driver conform to spec" change 2012-03-22 20:22:30 -07:00
atm Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
auxdisplay
base drivers: power: Add watchdog timer to catch drivers which lockup during suspend. 2012-04-09 13:53:08 -07:00
bcma
block Two fixes for regressions: 2012-04-06 17:54:53 -07:00
bluetooth Merge branch 'akpm' (Andrew's patch-bomb) 2012-04-05 15:30:34 -07:00
cdrom
char [ARM] armv6 dcc tty driver 2012-04-09 13:53:12 -07:00
clk
clocksource Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm 2012-03-29 16:53:48 -07:00
connector
cpufreq ARM: SoC fixes for 3.4-rc2 2012-04-05 22:13:39 -07:00
cpuidle cpuidle: governor: menu: don't use loadavg 2012-04-09 13:53:10 -07:00
crypto Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2012-03-22 18:15:32 -07:00
dca
devfreq ARM: global cleanups 2012-03-27 16:03:32 -07:00
dio
dma Merge branch 'akpm' (Andrew's patch-bomb) 2012-04-05 15:30:34 -07:00
edac Merge branch 'stable' of git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile 2012-04-06 17:56:20 -07:00
eisa
firewire Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
firmware
gpio gpio: tegra: Iterate over the correct number of banks 2012-04-04 13:13:18 -06:00
gpu Merge branch 'akpm' (Andrew's patch-bomb) 2012-04-05 15:30:34 -07:00
hid simple_open: automatically convert to simple_open() 2012-04-05 15:25:50 -07:00
hsi
hv
hwmon hwmon: (ad7314) Adds missing spi_dev initialization 2012-04-03 17:08:28 -07:00
hwspinlock
i2c Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
ide Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
idle simple_open: automatically convert to simple_open() 2012-04-05 15:25:50 -07:00
ieee802154
infiniband Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
input Input: synaptics_i2c_rmi: Driver for Synaptics Touchscreens using RMI over I2C. 2012-04-09 13:53:16 -07:00
iommu Merge branch 'akpm' (Andrew's patch-bomb) 2012-04-05 15:30:34 -07:00
isdn Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-02 17:53:39 -07:00
leds ledtrig-sleep: Add led trigger for sleep debugging. 2012-04-09 13:53:13 -07:00
lguest
macintosh Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
mca
md md/raid1,raid10: don't compare excess byte during consistency check. 2012-04-03 15:39:23 +10:00
media ARM: cleanups of io includes 2012-03-29 18:02:10 -07:00
memstick memstick: remove the second argument of k[un]map_atomic() 2012-03-20 21:48:19 +08:00
message Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
mfd Merge branch 'akpm' (Andrew's patch-bomb) 2012-04-05 15:30:34 -07:00
misc misc: uidstat: Adding uid stat driver to collect network statistics. 2012-04-09 13:53:15 -07:00
mmc mmc: Set suspend/resume bus operations if CONFIG_PM_RUNTIME is used 2012-04-09 13:57:45 -07:00
mtd mtd: nand: Allow NAND chip ids to be included standalone. 2012-04-09 13:53:08 -07:00
net net: PPPoPNS and PPPoLAC fixes. 2012-04-09 13:57:47 -07:00
nfc
nubus Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
of GPIO changes for v3.4 2012-03-28 14:08:46 -07:00
oprofile simple_open: automatically convert to simple_open() 2012-04-05 15:25:50 -07:00
parisc Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
parport
pci Two fixes for regressions: 2012-04-06 17:54:53 -07:00
pcmcia Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia 2012-03-29 16:00:48 -07:00
pinctrl
platform Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2012-03-30 16:45:39 -07:00
pnp Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2012-03-30 16:45:39 -07:00
power power_supply: Hold a wake_lock while power supply change notifications are pending 2012-04-09 13:53:14 -07:00
pps
ps3
ptp
rapidio
regulator regulator: Fixes for -rc1 2012-04-04 10:09:30 -07:00
remoteproc simple_open: automatically convert to simple_open() 2012-04-05 15:25:50 -07:00
rpmsg
rtc Merge branch 'akpm' (Andrew's patch-bomb) 2012-04-05 15:30:34 -07:00
s390 Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
sbus Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
scsi Merge branch 'akpm' (Andrew's patch-bomb) 2012-04-05 15:30:34 -07:00
sfi
sh SuperH updates for 3.4 merge window 2012-03-30 00:09:17 -07:00
sn
spi Merge branch 'akpm' (Andrew's patch-bomb) 2012-04-05 15:30:34 -07:00
ssb Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2012-03-20 21:04:47 -07:00
staging ashmem: Add shmem_set_file to mm/shmem.c 2012-04-09 13:53:14 -07:00
switch switch: switch class and GPIO drivers. 2012-04-09 13:53:14 -07:00
target tcm_fc: Do not free tpg structure during wq allocation failure 2012-04-06 18:57:05 -07:00
tc
thermal thermal: Fix for setting the thermal zone mode to enable/disable 2012-03-22 01:10:18 -04:00
tty SuperH updates for 3.4-rc1 2012-04-07 09:52:46 -07:00
uio
usb ARM: SoC fixes for 3.4-rc2 2012-04-05 22:13:39 -07:00
uwb simple_open: automatically convert to simple_open() 2012-04-05 15:25:50 -07:00
vhost Merge branch 'vhost-net' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost 2012-03-23 14:46:48 -04:00
video ARM: SoC fixes for 3.4-rc2 2012-04-05 22:13:39 -07:00
virt
virtio virtio-pci: switch to PM ops macro to initialise PM functions 2012-03-31 08:09:51 +05:30
vlynq
w1
watchdog ARM: cleanups of io includes 2012-03-29 18:02:10 -07:00
xen Two fixes for regressions: 2012-04-06 17:54:53 -07:00
zorro
Kconfig switch: switch class and GPIO drivers. 2012-04-09 13:53:14 -07:00
Makefile switch: switch class and GPIO drivers. 2012-04-09 13:53:14 -07:00