Message ID | 20130628151453.GA29428@redhat.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
On Fri, 2013-06-28 at 11:14 -0400, Dave Jones wrote: > Two of the x25 ioctl cases have error paths that break out of the function without > unlocking the socket, leading to this warning: > > > ================================================ > [ BUG: lock held when returning to user space! ] > 3.10.0-rc7+ #36 Not tainted > ------------------------------------------------ > trinity-child2/31407 is leaving the kernel with locks still held! > 1 lock held by trinity-child2/31407: > #0: (sk_lock-AF_X25){+.+.+.}, at: [<ffffffffa024b6da>] x25_ioctl+0x8a/0x740 [x25] > > Signed-off-by: Dave Jones <davej@redhat.com> > > diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c > index 37ca969..2c1e633 100644 > --- a/net/x25/af_x25.c > +++ b/net/x25/af_x25.c > @@ -1584,10 +1584,11 @@ out_cud_release: > rc = -EINVAL; > lock_sock(sk); > if (sk->sk_state != TCP_CLOSE) > - break; > + goto out_callaccpt_release; > clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags); > - release_sock(sk); > rc = 0; > +out_callaccpt_release: > + release_sock(sk); > break; > } Or : lock_sock(sk); if (sk->sk_state == TCP_CLOSE) { clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags); rc = 0; } release_sock(sk); break; -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Jun 28, 2013 at 08:19:35AM -0700, Eric Dumazet wrote: > On Fri, 2013-06-28 at 11:14 -0400, Dave Jones wrote: > > Two of the x25 ioctl cases have error paths that break out of the function without > > unlocking the socket, leading to this warning: > > > > > > ================================================ > > [ BUG: lock held when returning to user space! ] > > 3.10.0-rc7+ #36 Not tainted > > ------------------------------------------------ > > trinity-child2/31407 is leaving the kernel with locks still held! > > 1 lock held by trinity-child2/31407: > > #0: (sk_lock-AF_X25){+.+.+.}, at: [<ffffffffa024b6da>] x25_ioctl+0x8a/0x740 [x25] > > > > Signed-off-by: Dave Jones <davej@redhat.com> > > > > diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c > > index 37ca969..2c1e633 100644 > > --- a/net/x25/af_x25.c > > +++ b/net/x25/af_x25.c > > @@ -1584,10 +1584,11 @@ out_cud_release: > > rc = -EINVAL; > > lock_sock(sk); > > if (sk->sk_state != TCP_CLOSE) > > - break; > > + goto out_callaccpt_release; > > clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags); > > - release_sock(sk); > > rc = 0; > > +out_callaccpt_release: > > + release_sock(sk); > > break; > > } > > Or : > > lock_sock(sk); > if (sk->sk_state == TCP_CLOSE) { > clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags); > rc = 0; > } > release_sock(sk); > break; I can do that if it's preferred. I just copied the same style as the existing cases. Dave -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
================================================ [ BUG: lock held when returning to user space! ] 3.10.0-rc7+ #36 Not tainted ------------------------------------------------ trinity-child2/31407 is leaving the kernel with locks still held! 1 lock held by trinity-child2/31407: #0: (sk_lock-AF_X25){+.+.+.}, at: [<ffffffffa024b6da>] x25_ioctl+0x8a/0x740 [x25] Signed-off-by: Dave Jones <davej@redhat.com> diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c index 37ca969..2c1e633 100644 --- a/net/x25/af_x25.c +++ b/net/x25/af_x25.c @@ -1584,10 +1584,11 @@ out_cud_release: rc = -EINVAL; lock_sock(sk); if (sk->sk_state != TCP_CLOSE) - break; + goto out_callaccpt_release; clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags); - release_sock(sk); rc = 0; +out_callaccpt_release: + release_sock(sk); break; } @@ -1595,14 +1596,15 @@ out_cud_release: rc = -EINVAL; lock_sock(sk); if (sk->sk_state != TCP_ESTABLISHED) - break; + goto out_sendcallaccpt_release; /* must call accptapprv above */ if (test_bit(X25_ACCPT_APPRV_FLAG, &x25->flags)) - break; + goto out_sendcallaccpt_release; x25_write_internal(sk, X25_CALL_ACCEPTED); x25->state = X25_STATE_3; - release_sock(sk); rc = 0; +out_sendcallaccpt_release: + release_sock(sk); break; }