aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/gigaset
diff options
context:
space:
mode:
authorTilman Schmidt <tilman@imap.cc>2009-10-06 12:18:31 +0000
committerDavid S. Miller <davem@davemloft.net>2009-10-06 22:20:58 -0700
commitee239d9901c13040598f6c46d5017869c6d14e2e (patch)
treeda17fe435e47009304ebb3a5052eedf7aeae8249 /drivers/isdn/gigaset
parentgigaset: fix reject/hangup handling (diff)
downloadlinux-dev-ee239d9901c13040598f6c46d5017869c6d14e2e.tar.xz
linux-dev-ee239d9901c13040598f6c46d5017869c6d14e2e.zip
gigaset: linearize skb
The code of the Gigaset driver assumes that sk_buff-s coming from the ISDN4Linux subsystem are always linear. Explicitly calling skb_linearize() is cheap if they are, but much more robust in case they ever aren't. Impact: robustness improvement Signed-off-by: Tilman Schmidt <tilman@imap.cc> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn/gigaset')
-rw-r--r--drivers/isdn/gigaset/i4l.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/isdn/gigaset/i4l.c b/drivers/isdn/gigaset/i4l.c
index 9b22f9cf2f33..322f16ebc6ec 100644
--- a/drivers/isdn/gigaset/i4l.c
+++ b/drivers/isdn/gigaset/i4l.c
@@ -51,6 +51,12 @@ static int writebuf_from_LL(int driverID, int channel, int ack,
return -ENODEV;
}
bcs = &cs->bcs[channel];
+
+ /* can only handle linear sk_buffs */
+ if (skb_linearize(skb) < 0) {
+ dev_err(cs->dev, "%s: skb_linearize failed\n", __func__);
+ return -ENOMEM;
+ }
len = skb->len;
gig_dbg(DEBUG_LLDATA,