From owner-freebsd-bugs@FreeBSD.ORG Sun Dec 30 13:40:00 2012 Return-Path: Delivered-To: freebsd-bugs@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D3BE8CD7 for ; Sun, 30 Dec 2012 13:40:00 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id A6EE68FC08 for ; Sun, 30 Dec 2012 13:40:00 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id qBUDe0YJ099834 for ; Sun, 30 Dec 2012 13:40:00 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id qBUDe0Ys099832; Sun, 30 Dec 2012 13:40:00 GMT (envelope-from gnats) Resent-Date: Sun, 30 Dec 2012 13:40:00 GMT Resent-Message-Id: <201212301340.qBUDe0Ys099832@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Fabian Keil Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0ADD6CCB for ; Sun, 30 Dec 2012 13:39:17 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22]) by mx1.freebsd.org (Postfix) with ESMTP id CA45F8FC12 for ; Sun, 30 Dec 2012 13:39:16 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.5/8.14.5) with ESMTP id qBUDdG1S038254 for ; Sun, 30 Dec 2012 13:39:16 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.5/8.14.5/Submit) id qBUDdGTb038253; Sun, 30 Dec 2012 13:39:16 GMT (envelope-from nobody) Message-Id: <201212301339.qBUDdGTb038253@red.freebsd.org> Date: Sun, 30 Dec 2012 13:39:16 GMT From: Fabian Keil To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Subject: bin/174831: [PATCH] geli segfaults with the new locked memory limit default X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Dec 2012 13:40:01 -0000 >Number: 174831 >Category: bin >Synopsis: [PATCH] geli segfaults with the new locked memory limit default >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Dec 30 13:40:00 UTC 2012 >Closed-Date: >Last-Modified: >Originator: Fabian Keil >Release: HEAD >Organization: >Environment: FreeBSD r500.local 10.0-CURRENT FreeBSD 10.0-CURRENT #536 r+d9956e5: Wed Dec 26 16:42:41 CET 2012 fk@r500.local:/usr/obj/usr/src/sys/ZOEY amd64 >Description: Since the last login.conf update geli segfaults when called as ordinary user or with sudo. fk@r500 ~ $sudo /sbin/geli attach /dev/label/test || tail -n 2 /var/log/messages Dec 30 13:37:30 r500 kernel: [5043] pid 3521 (geli), uid 0: exited on signal 11 Dec 30 13:37:42 r500 sudo: fk : TTY=pts/6 ; PWD=/home/fk ; USER=root ; COMMAND=/sbin/geli attach /dev/label/test The problem seems to be the new locked memory limit default of 64K. Executing geli from a root shell works as expected and setting vm.old_mlock=0 works around the problem. >How-To-Repeat: See description. >Fix: The attached patch lets geli try to set the limit to 1024K which seems to be sufficient to prevent the segmentation fault and results in a proper error message if the user lacks the required privileges. Patch attached with submission follows: >From 4aa5fe7e0b70a0c437fbcbebec4e7cc89c7afa2c Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Sun, 30 Dec 2012 13:48:15 +0100 Subject: [PATCH] Let eli_protect() make sure the locked memory limit is high enough Prevents segmentation faults with the new locked memory limit default for ordinary users (64K). --- sbin/geom/class/eli/geom_eli.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sbin/geom/class/eli/geom_eli.c b/sbin/geom/class/eli/geom_eli.c index cfd8897..06dadac 100644 --- a/sbin/geom/class/eli/geom_eli.c +++ b/sbin/geom/class/eli/geom_eli.c @@ -272,6 +272,14 @@ eli_protect(struct gctl_req *req) strerror(errno)); return (-1); } + /* Make sure the locked memory limit is high enough. */ + rl.rlim_cur = 1024 * 1024; + rl.rlim_max = 1024 * 1024; + if (setrlimit(RLIMIT_MEMLOCK, &rl) == -1) { + gctl_error(req, "Cannot set locked memory limit: %s.", + strerror(errno)); + return (-1); + } /* Disable swapping. */ if (mlockall(MCL_FUTURE) == -1) { gctl_error(req, "Cannot lock memory: %s.", strerror(errno)); -- 1.8.0.2 >Release-Note: >Audit-Trail: >Unformatted: