From owner-freebsd-current@freebsd.org Sat May 18 05:33:36 2019 Return-Path: Delivered-To: freebsd-current@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BF47D15A8E23 for ; Sat, 18 May 2019 05:33:36 +0000 (UTC) (envelope-from markjdb@gmail.com) Received: from mail-io1-xd42.google.com (mail-io1-xd42.google.com [IPv6:2607:f8b0:4864:20::d42]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A988D6A33D for ; Sat, 18 May 2019 05:33:35 +0000 (UTC) (envelope-from markjdb@gmail.com) Received: by mail-io1-xd42.google.com with SMTP id x24so7150601ion.5 for ; Fri, 17 May 2019 22:33:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=a7vOk2xiU4C+LB0faEsBUmSpYl2TqheqSxMHlw5yXk8=; b=eSwMc/Bkz9odbdepueFcER4Eo9+CSgqpRwpiSaHuFMFyTAnmBigqJSKagnYPSkJ59P dNbIt64darbWYrmpfJLfxrn8+Y6jCjwFAeY/8MoXc8P7Z6Wz3ku/Ql12sCWaEYdaRg38 mfNUq/9eKWWK+V0CKp/CkQmHC02EOCBcn5mSyomXvzFAY8X7GMB25Z1he8dLp7bn8+bP qtRcd+L43+TR6nKBy3oPNdaG1KFfj4re5ll3+mYCXGuIJgsivHxJsww8H88Wk1mKY+My eg+XfZYJgXjsH3+iEPIrMg6YaoUJvNXv4f8FiuIFfVD0Ut6ELc/Qua2wsSGFSkuu1hr1 UcPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition:in-reply-to:user-agent; bh=a7vOk2xiU4C+LB0faEsBUmSpYl2TqheqSxMHlw5yXk8=; b=gxHs1mmwJbRut5V70JgFQ6ylMMwn0N8vIZYAhpa+vIxtStba909xndpKgINdUJ5sCc XTX7+ByNAFv1SVXoKP/tw1gJB5RRbtMv/vmlxPos07RckbHWPN2ccsI8kui2qjyloMpL y6GeZ5vI3mxkbn6rNdHD/zUkl2DrtBx/KF7acjnXfKod2tCsRiM55fjVT6wcuhIM1/8a XUj0MDIdnkV+hbrJ+1z+kaRZ+HXiWD93pNZ8Xi3d7+XX+L13Q4BB63vP1dr24ek4LAuW 4YXLenL9B4uljDiZhdLJhgz+d+83y2izTQxq7wRAA1IB6OxtuNik+dWegcOjuWndHF1F 6b9Q== X-Gm-Message-State: APjAAAXE0F1pzk7BN1pmx/2kmHGLNEIJQwIfISzchs8di4F80VpG3+P0 FVHaLyGw8xjOXFmS1IQ34Qo= X-Google-Smtp-Source: APXvYqxPM6RMl9q41Mx3PW5XPt3+uyDxPanKe9T8fWc/HwRBnVLUGkqYuLcL3Gv47/k73dlQ7vPLmg== X-Received: by 2002:a5e:8513:: with SMTP id i19mr14698961ioj.119.1558157614897; Fri, 17 May 2019 22:33:34 -0700 (PDT) Received: from raichu (toroon0560w-lp140-01-69-159-36-31.dsl.bell.ca. [69.159.36.31]) by smtp.gmail.com with ESMTPSA id r12sm1302895itb.2.2019.05.17.22.33.32 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 17 May 2019 22:33:33 -0700 (PDT) Sender: Mark Johnston Date: Sat, 18 May 2019 01:33:28 -0400 From: Mark Johnston To: Rebecca Cran Cc: freebsd-current@freebsd.org Subject: Re: panic booting with if_tap_load="YES" in loader.conf Message-ID: <20190518053328.GA7370@raichu> References: <105ad083-ea95-21a7-35be-de01e32578c4@bluestop.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <105ad083-ea95-21a7-35be-de01e32578c4@bluestop.org> User-Agent: Mutt/1.11.4 (2019-03-13) X-Rspamd-Queue-Id: A988D6A33D X-Spamd-Bar: --- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20161025 header.b=eSwMc/Bk; spf=pass (mx1.freebsd.org: domain of markjdb@gmail.com designates 2607:f8b0:4864:20::d42 as permitted sender) smtp.mailfrom=markjdb@gmail.com X-Spamd-Result: default: False [-3.43 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ip6:2607:f8b0:4000::/36]; RCVD_COUNT_THREE(0.00)[3]; DKIM_TRACE(0.00)[gmail.com:+]; RCPT_COUNT_TWO(0.00)[2]; MX_GOOD(-0.01)[cached: alt3.gmail-smtp-in.l.google.com]; FORGED_SENDER(0.30)[markj@freebsd.org,markjdb@gmail.com]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_LAST(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; FROM_NEQ_ENVFROM(0.00)[markj@freebsd.org,markjdb@gmail.com]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000,0]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; FROM_HAS_DN(0.00)[]; NEURAL_HAM_SHORT(-0.90)[-0.903,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; MIME_GOOD(-0.10)[text/plain]; PREVIOUSLY_DELIVERED(0.00)[freebsd-current@freebsd.org]; DMARC_NA(0.00)[freebsd.org]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2.4.d.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.4.6.8.4.0.b.8.f.7.0.6.2.list.dnswl.org : 127.0.5.0]; IP_SCORE(-0.82)[ip: (1.50), ipnet: 2607:f8b0::/32(-3.27), asn: 15169(-2.27), country: US(-0.06)]; MID_RHS_NOT_FQDN(0.50)[] X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 May 2019 05:33:37 -0000 On Fri, May 17, 2019 at 10:18:57PM -0600, Rebecca Cran wrote: > I just updated from r346856 to r347950 and ran into a new panic, caused > by having if_tap_load="YES" in /boot/loader.conf - because it's already > built-in to the kernel: I think this patch should fix the panic, but I only compile-tested it. I considered having the logic live in preload_delete_name() instead, but the boot-time ucode code must still defer the deletion somewhat. diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c index 6ceb34d66b74..10b28d5d375c 100644 --- a/sys/kern/link_elf.c +++ b/sys/kern/link_elf.c @@ -1179,11 +1179,41 @@ link_elf_unload_file(linker_file_t file) free(ef->typoff, M_LINKER); } +struct pending_unload { + char pathname[MAXPATHLEN]; + SLIST_ENTRY(pending_unload) next; +}; +SLIST_HEAD(, pending_unload) pending = SLIST_HEAD_INITIALIZER(pending); + static void -link_elf_unload_preload(linker_file_t file) +link_elf_unload_pending(void *arg __unused) { - if (file->pathname != NULL) + struct pending_unload *file; + + while ((file = SLIST_FIRST(&pending)) != NULL) { preload_delete_name(file->pathname); + SLIST_REMOVE_HEAD(&pending, next); + free(file, M_LINKER); + } +} +SYSINIT(unload_pending, SI_SUB_CONFIGURE + 1, SI_ORDER_ANY, + link_elf_unload_pending, NULL); + +static void +link_elf_unload_preload(linker_file_t lf) +{ + struct pending_unload *file; + + if (lf->pathname != NULL) { + if (!cold) { + preload_delete_name(lf->pathname); + return; + } + file = malloc(sizeof(*file), M_LINKER, M_WAITOK); + (void)strlcpy(file->pathname, lf->pathname, + sizeof(file->pathname)); + SLIST_INSERT_HEAD(&pending, file, next); + } } static const char *