From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932659AbcLIG5l (ORCPT ); Fri, 9 Dec 2016 01:57:41 -0500 Received: from mail-io0-f193.google.com ([209.85.223.193]:34769 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751983AbcLIG5j (ORCPT ); Fri, 9 Dec 2016 01:57:39 -0500 MIME-Version: 1.0 In-Reply-To: <20161209060248.GT22655@madcap2.tricolour.ca> References: <20161129164859.GD26673@madcap2.tricolour.ca> <20161130045207.GE26673@madcap2.tricolour.ca> <20161209060248.GT22655@madcap2.tricolour.ca> From: Cong Wang Date: Thu, 8 Dec 2016 22:57:18 -0800 Message-ID: Subject: Re: netlink: GPF in sock_sndtimeo To: Richard Guy Briggs Cc: linux-audit@redhat.com, Paul Moore , Dmitry Vyukov , David Miller , Johannes Berg , Florian Westphal , Eric Dumazet , Herbert Xu , netdev , LKML , syzkaller Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Dec 8, 2016 at 10:02 PM, Richard Guy Briggs wrote: > I also tried to extend Cong Wang's idea to attempt to proactively respond to a > NETLINK_URELEASE on the audit_sock and reset it, but ran into a locking error > stack dump using mutex_lock(&audit_cmd_mutex) in the notifier callback. > Eliminating the lock since the sock is dead anways eliminates the error. > > Is it safe? I'll resubmit if this looks remotely sane. Meanwhile I'll try to > get the test case to compile. It doesn't look safe, because 'audit_sock', 'audit_nlk_portid' and 'audit_pid' are updated as a whole and race between audit_receive_msg() and NETLINK_URELEASE. > @@ -1167,10 +1190,14 @@ static void __net_exit audit_net_exit(struct net *net) > { > struct audit_net *aunet = net_generic(net, audit_net_id); > struct sock *sock = aunet->nlsk; > + > + mutex_lock(&audit_cmd_mutex); > if (sock == audit_sock) { > audit_pid = 0; > + audit_nlk_portid = 0; > audit_sock = NULL; > } > + mutex_unlock(&audit_cmd_mutex); > If you decide to use NETLINK_URELEASE notifier, the above piece is no longer needed, the net_exit path simply releases a refcnt.