diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2006-11-29 11:40:22 +0100 |
---|---|---|
committer | Adrian Bunk <bunk@stusta.de> | 2006-11-29 11:40:22 +0100 |
commit | 82182ed2ce8df69635bcfed4baad8bbfae842bc8 (patch) | |
tree | da5bc595a8151b82150069759097c6dc1d358d4d /include | |
parent | cf76a4a8bd6b14d9fc09e2d050253dc70312c273 (diff) |
add forgotten ->b_data in memcpy() call in ext3/resize.c (oopsable)
sbi->s_group_desc is an array of pointers to buffer_head. memcpy() of
buffer size from address of buffer_head is a bad idea - it will generate
junk in any case, may oops if buffer_head is close to the end of slab
page and next page is not mapped and isn't what was intended there.
IOW, ->b_data is missing in that call. Fortunately, result doesn't go
into the primary on-disk data structures, so only backup ones get crap
written to them; that had allowed this bug to remain unnoticed until
now.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/skbuff.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 7e631a54257..9a0e9e78933 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -998,6 +998,21 @@ static inline int pskb_trim(struct sk_buff *skb, unsigned int len) } /** + * pskb_trim_unique - remove end from a paged unique (not cloned) buffer + * @skb: buffer to alter + * @len: new length + * + * This is identical to pskb_trim except that the caller knows that + * the skb is not cloned so we should never get an error due to out- + * of-memory. + */ +static inline void pskb_trim_unique(struct sk_buff *skb, unsigned int len) +{ + int err = pskb_trim(skb, len); + BUG_ON(err); +} + +/** * skb_orphan - orphan a buffer * @skb: buffer to orphan * |