From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH] tests/gem_reset_stats: add close-pending-fork Date: Mon, 02 Dec 2013 18:32:51 +0200 Message-ID: <87wqjnmcwc.fsf@gaia.fi.intel.com> References: <1385995666-3541-1-git-send-email-mika.kuoppala@intel.com> <20131202150308.GC26672@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id DF50AFA953 for ; Mon, 2 Dec 2013 08:33:23 -0800 (PST) In-Reply-To: <20131202150308.GC26672@nuc-i3427.alporthouse.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Chris Wilson writes: > On Mon, Dec 02, 2013 at 04:47:46PM +0200, Mika Kuoppala wrote: >> Fork and create another filedesc to wait access to already >> hung GPU and then kill it. This triggers use after free of the >> request->batch_obj. >> >> Signed-off-by: Mika Kuoppala >> --- >> +static int __test_open_any(void) >> +{ >> + char *name; >> + int ret, fd; >> + >> + ret = asprintf(&name, "/dev/dri/card%d", drm_get_card()); >> + if (ret == -1) >> + return -1; >> + >> + fd = open(name, O_RDWR); >> + free(name); >> + >> + return fd; >> +} >> + >> +static void test_close_pending_fork(void) >> +{ >> + int pid; >> + int fd, fd2, h; >> + >> + fd = drm_open_any(); >> + igt_assert(fd >= 0); > > [snip] > >> + close(fd); >> + >> + fd = drm_open_any(); > > This breaks the testsuite since drm_open_any() will now return the > closed fd. Hence your __test_open_any() above. > > However this does not justify kernel doing anything other than terminating > your process with extreme prejudice. I discussed this with Chris in IRC. There seems to be no problem as drm_open_any doesn't cache file descriptors. The reason i use __test_open_any is that I needed a way to bypass testsuites exit handling. --Mika