Re: patch idr-fix-a-critical-misallocation-bug.patch added to 2.6.32-stable tree

From: Stefan Lippers-Hollmann
Date: Thu Feb 11 2010 - 09:32:36 EST


Hi

On Thursday 11 February 2010, Tejun Heo wrote:
> Hello,
>
> Can you please test the following patch on top of the current
> mainline?
>
> Thanks.

This works fine for me on 2.6.33-rc7-git5 plus your patch:

KMS enabled:
ii xserver-xorg-video-intel 2:2.9.1-2 X.Org X server -- Intel i8xx, i9xx display driver
- 00:02.0 VGA compatible controller [0300]: Intel Corporation 82945G/GZ Integrated Graphics Controller [8086:2772] (rev 02)
00:02.0 VGA compatible controller [0300]: Intel Corporation Mobile 945GME Express Integrated Graphics Controller [8086:27ae] (rev 03)

KMS enabled:
ii xserver-xorg-video-radeon 1:6.12.4-3 X.Org X server -- ATI Radeon display driver
- 01:00.0 VGA compatible controller [0300]: ATI Technologies Inc RV630 [Radeon HD 2600 Series] [1002:9589]
01:00.1 Audio device [0403]: ATI Technologies Inc RV630/M76 audio device [Radeon HD 2600 Series] [1002:aa08]
- 05:00.0 VGA compatible controller [0300]: ATI Technologies Inc RV370 5B60 [Radeon X300 (PCIE)] [1002:5b60]
05:00.1 Display controller [0380]: ATI Technologies Inc RV370 [Radeon X300SE] [1002:5b70]
- 01:00.0 VGA compatible controller [0300]: ATI Technologies Inc RV350 [Mobility Radeon 9600 M10] [1002:4e50]
- 01:00.0 VGA compatible controller [0300]: ATI Technologies Inc RV280 [Radeon 9200 PRO] [1002:5960] (rev 01)
01:00.1 Display controller [0380]: ATI Technologies Inc RV280 [Radeon 9200 PRO] (Secondary) [1002:5940] (rev 01)

no KMS available (Debian unstable has no matching xserver-xorg-video-nouveau
yet):
ii xserver-xorg-video-nv 1:2.1.15-1 X.Org X server -- NV display driver
- 01:00.0 VGA compatible controller [0300]: nVidia Corporation NV11 [GeForce2 MX/MX 400] [10de:0110] (rev a1)

Tested-by: Stefan Lippers-Hollmann <s.l-h@xxxxxx>

Thank you a lot
Stefan Lippers-Hollmann

--
> diff --git a/lib/idr.c b/lib/idr.c
> index 1cac726..0dc7822 100644
> --- a/lib/idr.c
> +++ b/lib/idr.c
> @@ -156,10 +156,12 @@ static int sub_alloc(struct idr *idp, int *starting_id, struct idr_layer **pa)
> id = (id | ((1 << (IDR_BITS * l)) - 1)) + 1;
>
> /* if already at the top layer, we need to grow */
> - if (!(p = pa[l])) {
> + if (id >= 1 << (idp->layers * IDR_BITS)) {
> *starting_id = id;
> return IDR_NEED_TO_GROW;
> }
> + p = pa[l];
> + BUG_ON(!p);
>
> /* If we need to go up one layer, continue the
> * loop; otherwise, restart from the top.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/