| From: David S. Miller <davem@davemloft.net> |
| Date: Tue, 31 Aug 2010 01:35:24 +0000 (-0700) |
| Subject: irda: Correctly clean up self->ias_obj on irda_bind() failure. |
| X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdavem%2Fnet-2.6.git;a=commitdiff_plain;h=628e300cccaa628d8fb92aa28cb7530a3d5f2257 |
| |
| irda: Correctly clean up self->ias_obj on irda_bind() failure. |
| |
| If irda_open_tsap() fails, the irda_bind() code tries to destroy |
| the ->ias_obj object by hand, but does so wrongly. |
| |
| In particular, it fails to a) release the hashbin attached to the |
| object and b) reset the self->ias_obj pointer to NULL. |
| |
| Fix both problems by using irias_delete_object() and explicitly |
| setting self->ias_obj to NULL, just as irda_release() does. |
| |
| Reported-by: Tavis Ormandy <taviso@cmpxchg8b.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| |
| |
| diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c |
| index 79986a6..fd55b51 100644 |
| |
| |
| @@ -824,8 +824,8 @@ static int irda_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) |
| |
| err = irda_open_tsap(self, addr->sir_lsap_sel, addr->sir_name); |
| if (err < 0) { |
| - kfree(self->ias_obj->name); |
| - kfree(self->ias_obj); |
| + irias_delete_object(self->ias_obj); |
| + self->ias_obj = NULL; |
| goto out; |
| } |
| |