Re: [PATCH] intel_th: avoid double free in error flow

From: Alexander Shishkin
Date: Wed Nov 20 2019 - 08:38:20 EST

Wen Yang <wenyang@xxxxxxxxxxxxxxxxx> writes:

> Another example after a few lines lower:
> ÂÂÂÂÂÂÂ err = device_add(&thdev->dev);
> ÂÂÂÂÂÂÂ if (err) {
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ put_device(&thdev->dev);
> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ goto fail_free_res;
> device_add() has increased the reference count,
> so when it returns an error, an additional call to put_device()
> is needed here to reduce the reference count.
> So the code in this place is correct.

No, device_add() drops its own extra reference in case of error (as it
should), so in "if (err) ..." branch we still only have just one
reference before it goes free.