Bug 206270 - CVE-2006-4997 IP over ATM clip_mkip dereference freed pointer
CVE-2006-4997 IP over ATM clip_mkip dereference freed pointer
Status: CLOSED ERRATA
Product: Red Hat Enterprise Linux 3
Classification: Red Hat
Component: kernel (Show other bugs)
3.0
All Linux
medium Severity medium
: ---
: ---
Assigned To: Thomas Graf
Brian Brock
impact=moderate,reported=20060912,sou...
: Security
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2006-09-13 08:43 EDT by Marcel Holtmann
Modified: 2014-06-18 04:29 EDT (History)
4 users (show)

See Also:
Fixed In Version: RHSA-2006-0710
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2006-10-19 08:46:07 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
proposed patch (475 bytes, patch)
2006-10-02 13:25 EDT, Thomas Graf
no flags Details | Diff

  None (edit)
Description Marcel Holtmann 2006-09-13 08:43:16 EDT
Reported by ADLab, Venustech info Ltd CHINA:

There is a vulnerability in function clip_mkip() in net/atm/clip.c. When
re-processing received data, a struct sk_buff pointer skb may be dereferenced
after a free operation. It will lead to a kernel panic and denying further service.
 
clip_mkip (clip.c):

502         while ((skb = skb_dequeue(&copy)) != NULL)
503                 if (!clip_devs) {
504                         atm_return(vcc,skb->truesize);
505                         kfree_skb(skb);
506                 }
507                 else {
508                         unsigned int len = skb->len;
509
510                         clip_push(vcc,skb);
511                         PRIV(skb->dev)->stats.rx_packets--;
512                         PRIV(skb->dev)->stats.rx_bytes -= len;
513                 }
 
At line 511, PRIV(skb->dev) reference skb->dev; but after call clip_push at line
510, skb may be freed.
 
clip_push (clip.c):

198 static void clip_push(struct atm_vcc *vcc,struct sk_buff *skb)
199 {

	......

234         memset(ATM_SKB(skb), 0, sizeof(struct atm_skb_data));
235         netif_rx(skb);
236 }
 
netif_rx (dev.c):

1392 int netif_rx(struct sk_buff *skb)
1393 {

	......

1428         kfree_skb(skb);	//drop skb
1429         return NET_RX_DROP;
1430 }

In netif_rx(), skb may be dropped during processing for congestion control or by
the protocol layers; the return value NET_RX_DROP is used to identify skb
pointer arg is dropped(freed).
Comment 2 Thomas Graf 2006-10-02 13:25:31 EDT
Created attachment 137572 [details]
proposed patch
Comment 3 RHEL Product and Program Management 2006-10-09 11:18:40 EDT
This request was evaluated by Red Hat Product Management for inclusion in a Red
Hat Enterprise Linux maintenance release.  Product Management has requested
further review of this request by Red Hat Engineering, for potential
inclusion in a Red Hat Enterprise Linux Update release for currently deployed
products.  This request is not yet committed for inclusion in an Update
release.
Comment 4 Jay Turner 2006-10-10 08:10:55 EDT
QE ack for U9.
Comment 5 Ernie Petrides 2006-10-10 18:20:30 EDT
A fix for this problem has just been committed to the RHEL3 U9
patch pool this evening (in kernel version 2.4.21-47.2.EL).
Comment 6 Ernie Petrides 2006-10-13 17:51:46 EDT
A fix for this problem has also been committed to the RHEL3 E9
patch pool this evening (in kernel version 2.4.21-47.0.1.EL).
Comment 9 Red Hat Bugzilla 2006-10-19 08:46:09 EDT
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHSA-2006-0710.html

Note You need to log in before you can comment on or make changes to this bug.