From 54fcbf1d4a0722d507b4656fa45cdb39d72b1bab Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 27 Aug 2019 09:55:43 +0200 Subject: Remove superfluous support for preloaded modules --- freebsd/sys/kern/subr_module.c | 313 ---------------------------------------- freebsd/sys/opencrypto/crypto.c | 2 + libbsd.py | 1 - 3 files changed, 2 insertions(+), 314 deletions(-) delete mode 100644 freebsd/sys/kern/subr_module.c diff --git a/freebsd/sys/kern/subr_module.c b/freebsd/sys/kern/subr_module.c deleted file mode 100644 index 21b2754c..00000000 --- a/freebsd/sys/kern/subr_module.c +++ /dev/null @@ -1,313 +0,0 @@ -#include - -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1998 Michael Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include - -#include -#include - -/* - * Preloaded module support - */ - -vm_offset_t preload_addr_relocate = 0; -caddr_t preload_metadata; - -/* - * Search for the preloaded module (name) - */ -caddr_t -preload_search_by_name(const char *name) -{ - caddr_t curp; - uint32_t *hdr; - int next; - - if (preload_metadata != NULL) { - - curp = preload_metadata; - for (;;) { - hdr = (uint32_t *)curp; - if (hdr[0] == 0 && hdr[1] == 0) - break; - - /* Search for a MODINFO_NAME field */ - if ((hdr[0] == MODINFO_NAME) && - !strcmp(name, curp + sizeof(uint32_t) * 2)) - return(curp); - - /* skip to next field */ - next = sizeof(uint32_t) * 2 + hdr[1]; - next = roundup(next, sizeof(u_long)); - curp += next; - } - } - return(NULL); -} - -/* - * Search for the first preloaded module of (type) - */ -caddr_t -preload_search_by_type(const char *type) -{ - caddr_t curp, lname; - uint32_t *hdr; - int next; - - if (preload_metadata != NULL) { - - curp = preload_metadata; - lname = NULL; - for (;;) { - hdr = (uint32_t *)curp; - if (hdr[0] == 0 && hdr[1] == 0) - break; - - /* remember the start of each record */ - if (hdr[0] == MODINFO_NAME) - lname = curp; - - /* Search for a MODINFO_TYPE field */ - if ((hdr[0] == MODINFO_TYPE) && - !strcmp(type, curp + sizeof(uint32_t) * 2)) - return(lname); - - /* skip to next field */ - next = sizeof(uint32_t) * 2 + hdr[1]; - next = roundup(next, sizeof(u_long)); - curp += next; - } - } - return(NULL); -} - -/* - * Walk through the preloaded module list - */ -caddr_t -preload_search_next_name(caddr_t base) -{ - caddr_t curp; - uint32_t *hdr; - int next; - - if (preload_metadata != NULL) { - - /* Pick up where we left off last time */ - if (base) { - /* skip to next field */ - curp = base; - hdr = (uint32_t *)curp; - next = sizeof(uint32_t) * 2 + hdr[1]; - next = roundup(next, sizeof(u_long)); - curp += next; - } else - curp = preload_metadata; - - for (;;) { - hdr = (uint32_t *)curp; - if (hdr[0] == 0 && hdr[1] == 0) - break; - - /* Found a new record? */ - if (hdr[0] == MODINFO_NAME) - return curp; - - /* skip to next field */ - next = sizeof(uint32_t) * 2 + hdr[1]; - next = roundup(next, sizeof(u_long)); - curp += next; - } - } - return(NULL); -} - -/* - * Given a preloaded module handle (mod), return a pointer - * to the data for the attribute (inf). - */ -caddr_t -preload_search_info(caddr_t mod, int inf) -{ - caddr_t curp; - uint32_t *hdr; - uint32_t type = 0; - int next; - - if (mod == NULL) - return (NULL); - - curp = mod; - for (;;) { - hdr = (uint32_t *)curp; - /* end of module data? */ - if (hdr[0] == 0 && hdr[1] == 0) - break; - /* - * We give up once we've looped back to what we were looking at - * first - this should normally be a MODINFO_NAME field. - */ - if (type == 0) { - type = hdr[0]; - } else { - if (hdr[0] == type) - break; - } - - /* - * Attribute match? Return pointer to data. - * Consumer may safely assume that size value precedes - * data. - */ - if (hdr[0] == inf) - return(curp + (sizeof(uint32_t) * 2)); - - /* skip to next field */ - next = sizeof(uint32_t) * 2 + hdr[1]; - next = roundup(next, sizeof(u_long)); - curp += next; - } - return(NULL); -} - -/* - * Delete a preload record by name. - */ -void -preload_delete_name(const char *name) -{ - caddr_t addr, curp; - uint32_t *hdr, sz; - int next; - int clearing; - - addr = 0; - sz = 0; - - if (preload_metadata != NULL) { - - clearing = 0; - curp = preload_metadata; - for (;;) { - hdr = (uint32_t *)curp; - if (hdr[0] == MODINFO_NAME || (hdr[0] == 0 && hdr[1] == 0)) { - /* Free memory used to store the file. */ - if (addr != 0 && sz != 0) - kmem_bootstrap_free((vm_offset_t)addr, sz); - addr = 0; - sz = 0; - - if (hdr[0] == 0) - break; - if (!strcmp(name, curp + sizeof(uint32_t) * 2)) - clearing = 1; /* got it, start clearing */ - else if (clearing) { - clearing = 0; /* at next one now.. better stop */ - } - } - if (clearing) { - if (hdr[0] == MODINFO_ADDR) - addr = *(caddr_t *)(curp + sizeof(uint32_t) * 2); - else if (hdr[0] == MODINFO_SIZE) - sz = *(uint32_t *)(curp + sizeof(uint32_t) * 2); - hdr[0] = MODINFO_EMPTY; - } - - /* skip to next field */ - next = sizeof(uint32_t) * 2 + hdr[1]; - next = roundup(next, sizeof(u_long)); - curp += next; - } - } -} - -void * -preload_fetch_addr(caddr_t mod) -{ - caddr_t *mdp; - - mdp = (caddr_t *)preload_search_info(mod, MODINFO_ADDR); - if (mdp == NULL) - return (NULL); - return (*mdp + preload_addr_relocate); -} - -size_t -preload_fetch_size(caddr_t mod) -{ - size_t *mdp; - - mdp = (size_t *)preload_search_info(mod, MODINFO_SIZE); - if (mdp == NULL) - return (0); - return (*mdp); -} - -/* Called from locore. Convert physical pointers to kvm. Sigh. */ -void -preload_bootstrap_relocate(vm_offset_t offset) -{ - caddr_t curp; - uint32_t *hdr; - vm_offset_t *ptr; - int next; - - if (preload_metadata != NULL) { - - curp = preload_metadata; - for (;;) { - hdr = (uint32_t *)curp; - if (hdr[0] == 0 && hdr[1] == 0) - break; - - /* Deal with the ones that we know we have to fix */ - switch (hdr[0]) { - case MODINFO_ADDR: - case MODINFO_METADATA|MODINFOMD_SSYM: - case MODINFO_METADATA|MODINFOMD_ESYM: - ptr = (vm_offset_t *)(curp + (sizeof(uint32_t) * 2)); - *ptr += offset; - break; - } - /* The rest is beyond us for now */ - - /* skip to next field */ - next = sizeof(uint32_t) * 2 + hdr[1]; - next = roundup(next, sizeof(u_long)); - curp += next; - } - } -} diff --git a/freebsd/sys/opencrypto/crypto.c b/freebsd/sys/opencrypto/crypto.c index d66fe5d5..d966d2a3 100644 --- a/freebsd/sys/opencrypto/crypto.c +++ b/freebsd/sys/opencrypto/crypto.c @@ -239,6 +239,7 @@ static struct keybuf empty_keybuf = { static void keybuf_init(void) { +#ifndef __rtems__ caddr_t kmdp; kmdp = preload_search_by_type("elf kernel"); @@ -250,6 +251,7 @@ keybuf_init(void) MODINFO_METADATA | MODINFOMD_KEYBUF); if (keybuf == NULL) +#endif /* __rtems__ */ keybuf = &empty_keybuf; } diff --git a/libbsd.py b/libbsd.py index 3d950f7c..f128961b 100644 --- a/libbsd.py +++ b/libbsd.py @@ -492,7 +492,6 @@ class base(builder.Module): 'sys/kern/subr_hints.c', 'sys/kern/subr_kobj.c', 'sys/kern/subr_lock.c', - 'sys/kern/subr_module.c', 'sys/kern/subr_pcpu.c', 'sys/kern/subr_prf.c', 'sys/kern/subr_rman.c', -- cgit v1.2.3