]> git.baikalelectronics.ru Git - kernel.git/commit
isdn/i4l: fetch the ppp_write buffer in one shot
authorMeng Xu <mengxu.gatech@gmail.com>
Wed, 20 Sep 2017 01:49:55 +0000 (21:49 -0400)
committerDavid S. Miller <davem@davemloft.net>
Wed, 20 Sep 2017 23:01:36 +0000 (16:01 -0700)
commit2b8c281563f065070b0680dded8cd4a3049756ee
tree84b4405a24c99a5c49b709978c4bb653fe225f0f
parentc27a486a484583253dc9ca2f875a2bb15631e873
isdn/i4l: fetch the ppp_write buffer in one shot

In isdn_ppp_write(), the header (i.e., protobuf) of the buffer is
fetched twice from userspace. The first fetch is used to peek at the
protocol of the message and reset the huptimer if necessary; while the
second fetch copies in the whole buffer. However, given that buf resides
in userspace memory, a user process can race to change its memory content
across fetches. By doing so, we can either avoid resetting the huptimer
for any type of packets (by first setting proto to PPP_LCP and later
change to the actual type) or force resetting the huptimer for LCP
packets.

This patch changes this double-fetch behavior into two single fetches
decided by condition (lp->isdn_device < 0 || lp->isdn_channel <0).
A more detailed discussion can be found at
https://marc.info/?l=linux-kernel&m=150586376926123&w=2

Signed-off-by: Meng Xu <mengxu.gatech@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/isdn/i4l/isdn_ppp.c