1 /* $NetBSD: subr_kobj.c,v 1.50 2014/07/16 13:26:33 maxv Exp $ */ 2 3 /*- 4 * Copyright (c) 2008 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software developed for The NetBSD Foundation 8 * by Andrew Doran. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 /*- 33 * Copyright (c) 1998-2000 Doug Rabson 34 * Copyright (c) 2004 Peter Wemm 35 * All rights reserved. 36 * 37 * Redistribution and use in source and binary forms, with or without 38 * modification, are permitted provided that the following conditions 39 * are met: 40 * 1. Redistributions of source code must retain the above copyright 41 * notice, this list of conditions and the following disclaimer. 42 * 2. Redistributions in binary form must reproduce the above copyright 43 * notice, this list of conditions and the following disclaimer in the 44 * documentation and/or other materials provided with the distribution. 45 * 46 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 47 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 48 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 49 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 50 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 51 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 52 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 53 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 54 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 55 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 56 * SUCH DAMAGE. 57 */ 58 59 /* 60 * Kernel loader for ELF objects. 61 * 62 * TODO: adjust kmem_alloc() calls to avoid needless fragmentation. 63 */ 64 65 #include <sys/cdefs.h> 66 __KERNEL_RCSID(0, "$NetBSD: subr_kobj.c,v 1.50 2014/07/16 13:26:33 maxv Exp $"); 67 68 #include "opt_modular.h" 69 70 #include <sys/kobj_impl.h> 71 72 #ifdef MODULAR 73 74 #include <sys/param.h> 75 #include <sys/kernel.h> 76 #include <sys/kmem.h> 77 #include <sys/proc.h> 78 #include <sys/ksyms.h> 79 #include <sys/module.h> 80 81 #include <uvm/uvm_extern.h> 82 83 #define kobj_error(_kobj, ...) \ 84 kobj_out(__func__, __LINE__, _kobj, __VA_ARGS__) 85 86 static int kobj_relocate(kobj_t, bool); 87 static int kobj_checksyms(kobj_t, bool); 88 static void kobj_out(const char *, int, kobj_t, const char *, ...) 89 __printflike(4, 5); 90 static void kobj_jettison(kobj_t); 91 static void kobj_free(kobj_t, void *, size_t); 92 static void kobj_close(kobj_t); 93 static int kobj_read_mem(kobj_t, void **, size_t, off_t, bool); 94 static void kobj_close_mem(kobj_t); 95 96 extern struct vm_map *module_map; 97 98 /* 99 * kobj_load_mem: 100 * 101 * Load an object already resident in memory. If size is not -1, 102 * the complete size of the object is known. 103 */ 104 int 105 kobj_load_mem(kobj_t *kop, const char *name, void *base, ssize_t size) 106 { 107 kobj_t ko; 108 109 ko = kmem_zalloc(sizeof(*ko), KM_SLEEP); 110 if (ko == NULL) { 111 return ENOMEM; 112 } 113 114 ko->ko_type = KT_MEMORY; 115 kobj_setname(ko, name); 116 ko->ko_source = base; 117 ko->ko_memsize = size; 118 ko->ko_read = kobj_read_mem; 119 ko->ko_close = kobj_close_mem; 120 121 *kop = ko; 122 return kobj_load(ko); 123 } 124 125 /* 126 * kobj_close: 127 * 128 * Close an open ELF object. 129 */ 130 static void 131 kobj_close(kobj_t ko) 132 { 133 134 if (ko->ko_source == NULL) { 135 return; 136 } 137 138 ko->ko_close(ko); 139 ko->ko_source = NULL; 140 } 141 142 static void 143 kobj_close_mem(kobj_t ko) 144 { 145 146 return; 147 } 148 149 /* 150 * kobj_load: 151 * 152 * Load an ELF object and prepare to link into the running kernel 153 * image. 154 */ 155 int 156 kobj_load(kobj_t ko) 157 { 158 Elf_Ehdr *hdr; 159 Elf_Shdr *shdr; 160 Elf_Sym *es; 161 vaddr_t mapbase; 162 size_t mapsize; 163 int error; 164 int symtabindex; 165 int symstrindex; 166 int nsym; 167 int pb, rl, ra; 168 int alignmask; 169 int i, j; 170 void *addr; 171 172 KASSERT(ko->ko_type != KT_UNSET); 173 KASSERT(ko->ko_source != NULL); 174 175 shdr = NULL; 176 error = 0; 177 hdr = NULL; 178 179 /* 180 * Read the elf header from the file. 181 */ 182 error = ko->ko_read(ko, (void **)&hdr, sizeof(*hdr), 0, true); 183 if (error != 0) { 184 kobj_error(ko, "read failed %d", error); 185 goto out; 186 } 187 if (memcmp(hdr->e_ident, ELFMAG, SELFMAG) != 0) { 188 kobj_error(ko, "not an ELF object"); 189 error = ENOEXEC; 190 goto out; 191 } 192 193 if (hdr->e_ident[EI_VERSION] != EV_CURRENT || 194 hdr->e_version != EV_CURRENT) { 195 kobj_error(ko, "unsupported file version %d", 196 hdr->e_ident[EI_VERSION]); 197 error = ENOEXEC; 198 goto out; 199 } 200 if (hdr->e_type != ET_REL) { 201 kobj_error(ko, "unsupported file type %d", hdr->e_type); 202 error = ENOEXEC; 203 goto out; 204 } 205 switch (hdr->e_machine) { 206 #if ELFSIZE == 32 207 ELF32_MACHDEP_ID_CASES 208 #elif ELFSIZE == 64 209 ELF64_MACHDEP_ID_CASES 210 #else 211 #error not defined 212 #endif 213 default: 214 kobj_error(ko, "unsupported machine %d", hdr->e_machine); 215 error = ENOEXEC; 216 goto out; 217 } 218 219 ko->ko_nprogtab = 0; 220 ko->ko_shdr = 0; 221 ko->ko_nrel = 0; 222 ko->ko_nrela = 0; 223 224 /* 225 * Allocate and read in the section header. 226 */ 227 if (hdr->e_shnum == 0 || hdr->e_shnum > ELF_MAXSHNUM || 228 hdr->e_shoff == 0 || hdr->e_shentsize != sizeof(Elf_Shdr)) { 229 kobj_error(ko, "bad sizes"); 230 error = ENOEXEC; 231 goto out; 232 } 233 ko->ko_shdrsz = hdr->e_shnum * sizeof(Elf_Shdr); 234 error = ko->ko_read(ko, (void **)&shdr, ko->ko_shdrsz, hdr->e_shoff, 235 true); 236 if (error != 0) { 237 kobj_error(ko, "read failed %d", error); 238 goto out; 239 } 240 ko->ko_shdr = shdr; 241 242 /* 243 * Scan the section header for information and table sizing. 244 */ 245 nsym = 0; 246 symtabindex = symstrindex = -1; 247 for (i = 0; i < hdr->e_shnum; i++) { 248 switch (shdr[i].sh_type) { 249 case SHT_PROGBITS: 250 case SHT_NOBITS: 251 ko->ko_nprogtab++; 252 break; 253 case SHT_SYMTAB: 254 nsym++; 255 symtabindex = i; 256 symstrindex = shdr[i].sh_link; 257 break; 258 case SHT_REL: 259 if (shdr[shdr[i].sh_info].sh_type != SHT_PROGBITS) 260 continue; 261 ko->ko_nrel++; 262 break; 263 case SHT_RELA: 264 if (shdr[shdr[i].sh_info].sh_type != SHT_PROGBITS) 265 continue; 266 ko->ko_nrela++; 267 break; 268 case SHT_STRTAB: 269 break; 270 } 271 } 272 if (ko->ko_nprogtab == 0) { 273 kobj_error(ko, "file has no contents"); 274 error = ENOEXEC; 275 goto out; 276 } 277 if (nsym != 1) { 278 /* Only allow one symbol table for now */ 279 kobj_error(ko, "file has no valid symbol table"); 280 error = ENOEXEC; 281 goto out; 282 } 283 KASSERT(symtabindex != -1); 284 KASSERT(symstrindex != -1); 285 286 if (symstrindex == SHN_UNDEF || symstrindex >= hdr->e_shnum || 287 shdr[symstrindex].sh_type != SHT_STRTAB) { 288 kobj_error(ko, "file has invalid symbol strings"); 289 error = ENOEXEC; 290 goto out; 291 } 292 293 /* 294 * Allocate space for tracking the load chunks. 295 */ 296 if (ko->ko_nprogtab != 0) { 297 ko->ko_progtab = kmem_zalloc(ko->ko_nprogtab * 298 sizeof(*ko->ko_progtab), KM_SLEEP); 299 if (ko->ko_progtab == NULL) { 300 error = ENOMEM; 301 kobj_error(ko, "out of memory"); 302 goto out; 303 } 304 } 305 if (ko->ko_nrel != 0) { 306 ko->ko_reltab = kmem_zalloc(ko->ko_nrel * 307 sizeof(*ko->ko_reltab), KM_SLEEP); 308 if (ko->ko_reltab == NULL) { 309 error = ENOMEM; 310 kobj_error(ko, "out of memory"); 311 goto out; 312 } 313 } 314 if (ko->ko_nrela != 0) { 315 ko->ko_relatab = kmem_zalloc(ko->ko_nrela * 316 sizeof(*ko->ko_relatab), KM_SLEEP); 317 if (ko->ko_relatab == NULL) { 318 error = ENOMEM; 319 kobj_error(ko, "out of memory"); 320 goto out; 321 } 322 } 323 324 /* 325 * Allocate space for and load the symbol table. 326 */ 327 ko->ko_symcnt = shdr[symtabindex].sh_size / sizeof(Elf_Sym); 328 if (ko->ko_symcnt == 0) { 329 kobj_error(ko, "no symbol table"); 330 error = ENOEXEC; 331 goto out; 332 } 333 error = ko->ko_read(ko, (void **)&ko->ko_symtab, 334 ko->ko_symcnt * sizeof(Elf_Sym), 335 shdr[symtabindex].sh_offset, true); 336 if (error != 0) { 337 kobj_error(ko, "read failed %d", error); 338 goto out; 339 } 340 341 /* 342 * Allocate space for and load the symbol strings. 343 */ 344 ko->ko_strtabsz = shdr[symstrindex].sh_size; 345 if (ko->ko_strtabsz == 0) { 346 kobj_error(ko, "no symbol strings"); 347 error = ENOEXEC; 348 goto out; 349 } 350 error = ko->ko_read(ko, (void *)&ko->ko_strtab, ko->ko_strtabsz, 351 shdr[symstrindex].sh_offset, true); 352 if (error != 0) { 353 kobj_error(ko, "read failed %d", error); 354 goto out; 355 } 356 357 /* 358 * Adjust module symbol namespace, if necessary (e.g. with rump) 359 */ 360 error = kobj_renamespace(ko->ko_symtab, ko->ko_symcnt, 361 &ko->ko_strtab, &ko->ko_strtabsz); 362 if (error != 0) { 363 kobj_error(ko, "renamespace failed %d", error); 364 goto out; 365 } 366 367 /* 368 * Do we have a string table for the section names? 369 */ 370 if (hdr->e_shstrndx != SHN_UNDEF) { 371 if (hdr->e_shstrndx >= hdr->e_shnum) { 372 kobj_error(ko, "bad shstrndx"); 373 error = ENOEXEC; 374 goto out; 375 } 376 if (shdr[hdr->e_shstrndx].sh_size != 0 && 377 shdr[hdr->e_shstrndx].sh_type == SHT_STRTAB) { 378 ko->ko_shstrtabsz = shdr[hdr->e_shstrndx].sh_size; 379 error = ko->ko_read(ko, (void **)&ko->ko_shstrtab, 380 shdr[hdr->e_shstrndx].sh_size, 381 shdr[hdr->e_shstrndx].sh_offset, true); 382 if (error != 0) { 383 kobj_error(ko, "read failed %d", error); 384 goto out; 385 } 386 } 387 } 388 389 /* 390 * Size up code/data(progbits) and bss(nobits). 391 */ 392 alignmask = 0; 393 mapbase = 0; 394 mapsize = 0; 395 for (i = 0; i < hdr->e_shnum; i++) { 396 switch (shdr[i].sh_type) { 397 case SHT_PROGBITS: 398 case SHT_NOBITS: 399 if (mapbase == 0) 400 mapbase = shdr[i].sh_offset; 401 alignmask = shdr[i].sh_addralign - 1; 402 mapsize += alignmask; 403 mapsize &= ~alignmask; 404 mapsize += shdr[i].sh_size; 405 break; 406 } 407 } 408 409 /* 410 * We know how much space we need for the text/data/bss/etc. 411 * This stuff needs to be in a single chunk so that profiling etc 412 * can get the bounds and gdb can associate offsets with modules. 413 */ 414 if (mapsize == 0) { 415 kobj_error(ko, "no text/data/bss"); 416 error = ENOEXEC; 417 goto out; 418 } 419 if (ko->ko_type == KT_MEMORY) { 420 mapbase += (vaddr_t)ko->ko_source; 421 } else { 422 mapbase = uvm_km_alloc(module_map, round_page(mapsize), 423 0, UVM_KMF_WIRED | UVM_KMF_EXEC); 424 if (mapbase == 0) { 425 kobj_error(ko, "out of memory"); 426 error = ENOMEM; 427 goto out; 428 } 429 } 430 ko->ko_address = mapbase; 431 ko->ko_size = mapsize; 432 433 /* 434 * Now load code/data(progbits), zero bss(nobits), allocate space 435 * for and load relocs 436 */ 437 pb = 0; 438 rl = 0; 439 ra = 0; 440 alignmask = 0; 441 for (i = 0; i < hdr->e_shnum; i++) { 442 switch (shdr[i].sh_type) { 443 case SHT_PROGBITS: 444 case SHT_NOBITS: 445 alignmask = shdr[i].sh_addralign - 1; 446 if (ko->ko_type == KT_MEMORY) { 447 addr = (void *)(shdr[i].sh_offset + 448 (vaddr_t)ko->ko_source); 449 if (((vaddr_t)addr & alignmask) != 0) { 450 kobj_error(ko, 451 "section %d not aligned", i); 452 error = ENOEXEC; 453 goto out; 454 } 455 } else { 456 mapbase += alignmask; 457 mapbase &= ~alignmask; 458 addr = (void *)mapbase; 459 mapbase += shdr[i].sh_size; 460 } 461 ko->ko_progtab[pb].addr = addr; 462 if (shdr[i].sh_type == SHT_PROGBITS) { 463 ko->ko_progtab[pb].name = "<<PROGBITS>>"; 464 error = ko->ko_read(ko, &addr, 465 shdr[i].sh_size, shdr[i].sh_offset, false); 466 if (error != 0) { 467 kobj_error(ko, "read failed %d", error); 468 goto out; 469 } 470 } else if (ko->ko_type == KT_MEMORY && 471 shdr[i].sh_size != 0) { 472 kobj_error(ko, "non-loadable BSS " 473 "section in pre-loaded module"); 474 error = ENOEXEC; 475 goto out; 476 } else { 477 ko->ko_progtab[pb].name = "<<NOBITS>>"; 478 memset(addr, 0, shdr[i].sh_size); 479 } 480 ko->ko_progtab[pb].size = shdr[i].sh_size; 481 ko->ko_progtab[pb].sec = i; 482 if (ko->ko_shstrtab != NULL && shdr[i].sh_name != 0) { 483 ko->ko_progtab[pb].name = 484 ko->ko_shstrtab + shdr[i].sh_name; 485 } 486 487 /* Update all symbol values with the offset. */ 488 for (j = 0; j < ko->ko_symcnt; j++) { 489 es = &ko->ko_symtab[j]; 490 if (es->st_shndx != i) { 491 continue; 492 } 493 es->st_value += (Elf_Addr)addr; 494 } 495 pb++; 496 break; 497 case SHT_REL: 498 if (shdr[shdr[i].sh_info].sh_type != SHT_PROGBITS) 499 break; 500 ko->ko_reltab[rl].size = shdr[i].sh_size; 501 ko->ko_reltab[rl].size -= 502 shdr[i].sh_size % sizeof(Elf_Rel); 503 if (ko->ko_reltab[rl].size != 0) { 504 ko->ko_reltab[rl].nrel = 505 shdr[i].sh_size / sizeof(Elf_Rel); 506 ko->ko_reltab[rl].sec = shdr[i].sh_info; 507 error = ko->ko_read(ko, 508 (void **)&ko->ko_reltab[rl].rel, 509 ko->ko_reltab[rl].size, 510 shdr[i].sh_offset, true); 511 if (error != 0) { 512 kobj_error(ko, "read failed %d", 513 error); 514 goto out; 515 } 516 } 517 rl++; 518 break; 519 case SHT_RELA: 520 if (shdr[shdr[i].sh_info].sh_type != SHT_PROGBITS) 521 break; 522 ko->ko_relatab[ra].size = shdr[i].sh_size; 523 ko->ko_relatab[ra].size -= 524 shdr[i].sh_size % sizeof(Elf_Rela); 525 if (ko->ko_relatab[ra].size != 0) { 526 ko->ko_relatab[ra].nrela = 527 shdr[i].sh_size / sizeof(Elf_Rela); 528 ko->ko_relatab[ra].sec = shdr[i].sh_info; 529 error = ko->ko_read(ko, 530 (void **)&ko->ko_relatab[ra].rela, 531 shdr[i].sh_size, 532 shdr[i].sh_offset, true); 533 if (error != 0) { 534 kobj_error(ko, "read failed %d", error); 535 goto out; 536 } 537 } 538 ra++; 539 break; 540 default: 541 break; 542 } 543 } 544 if (pb != ko->ko_nprogtab) { 545 panic("%s:%d: %s: lost progbits", __func__, __LINE__, 546 ko->ko_name); 547 } 548 if (rl != ko->ko_nrel) { 549 panic("%s:%d: %s: lost rel", __func__, __LINE__, 550 ko->ko_name); 551 } 552 if (ra != ko->ko_nrela) { 553 panic("%s:%d: %s: lost rela", __func__, __LINE__, 554 ko->ko_name); 555 } 556 if (ko->ko_type != KT_MEMORY && mapbase != ko->ko_address + mapsize) { 557 panic("%s:%d: %s: " 558 "mapbase 0x%lx != address %lx + mapsize %ld (0x%lx)\n", 559 __func__, __LINE__, ko->ko_name, 560 (long)mapbase, (long)ko->ko_address, (long)mapsize, 561 (long)ko->ko_address + mapsize); 562 } 563 564 /* 565 * Perform local relocations only. Relocations relating to global 566 * symbols will be done by kobj_affix(). 567 */ 568 error = kobj_checksyms(ko, false); 569 if (error == 0) { 570 error = kobj_relocate(ko, true); 571 } 572 out: 573 if (hdr != NULL) { 574 kobj_free(ko, hdr, sizeof(*hdr)); 575 } 576 kobj_close(ko); 577 if (error != 0) { 578 kobj_unload(ko); 579 } 580 581 return error; 582 } 583 584 /* 585 * kobj_unload: 586 * 587 * Unload an object previously loaded by kobj_load(). 588 */ 589 void 590 kobj_unload(kobj_t ko) 591 { 592 int error; 593 594 kobj_close(ko); 595 kobj_jettison(ko); 596 597 /* 598 * Notify MD code that a module has been unloaded. 599 */ 600 if (ko->ko_loaded) { 601 error = kobj_machdep(ko, (void *)ko->ko_address, ko->ko_size, 602 false); 603 if (error != 0) 604 kobj_error(ko, "machine dependent deinit failed %d", 605 error); 606 } 607 if (ko->ko_address != 0 && ko->ko_type != KT_MEMORY) { 608 uvm_km_free(module_map, ko->ko_address, round_page(ko->ko_size), 609 UVM_KMF_WIRED); 610 } 611 if (ko->ko_ksyms == true) { 612 ksyms_modunload(ko->ko_name); 613 } 614 if (ko->ko_symtab != NULL) { 615 kobj_free(ko, ko->ko_symtab, ko->ko_symcnt * sizeof(Elf_Sym)); 616 } 617 if (ko->ko_strtab != NULL) { 618 kobj_free(ko, ko->ko_strtab, ko->ko_strtabsz); 619 } 620 if (ko->ko_progtab != NULL) { 621 kobj_free(ko, ko->ko_progtab, ko->ko_nprogtab * 622 sizeof(*ko->ko_progtab)); 623 ko->ko_progtab = NULL; 624 } 625 if (ko->ko_shstrtab) { 626 kobj_free(ko, ko->ko_shstrtab, ko->ko_shstrtabsz); 627 ko->ko_shstrtab = NULL; 628 } 629 630 kmem_free(ko, sizeof(*ko)); 631 } 632 633 /* 634 * kobj_stat: 635 * 636 * Return size and load address of an object. 637 */ 638 int 639 kobj_stat(kobj_t ko, vaddr_t *address, size_t *size) 640 { 641 642 if (address != NULL) { 643 *address = ko->ko_address; 644 } 645 if (size != NULL) { 646 *size = ko->ko_size; 647 } 648 return 0; 649 } 650 651 /* 652 * kobj_affix: 653 * 654 * Set an object's name and perform global relocs. May only be 655 * called after the module and any requisite modules are loaded. 656 */ 657 int 658 kobj_affix(kobj_t ko, const char *name) 659 { 660 int error; 661 662 KASSERT(ko->ko_ksyms == false); 663 KASSERT(ko->ko_loaded == false); 664 665 kobj_setname(ko, name); 666 667 /* Cache addresses of undefined symbols. */ 668 error = kobj_checksyms(ko, true); 669 670 /* Now do global relocations. */ 671 if (error == 0) 672 error = kobj_relocate(ko, false); 673 674 /* 675 * Now that we know the name, register the symbol table. 676 * Do after global relocations because ksyms will pack 677 * the table. 678 */ 679 if (error == 0) { 680 ksyms_modload(ko->ko_name, ko->ko_symtab, ko->ko_symcnt * 681 sizeof(Elf_Sym), ko->ko_strtab, ko->ko_strtabsz); 682 ko->ko_ksyms = true; 683 } 684 685 /* Jettison unneeded memory post-link. */ 686 kobj_jettison(ko); 687 688 /* 689 * Notify MD code that a module has been loaded. 690 * 691 * Most architectures use this opportunity to flush their caches. 692 */ 693 if (error == 0) { 694 error = kobj_machdep(ko, (void *)ko->ko_address, ko->ko_size, 695 true); 696 if (error != 0) 697 kobj_error(ko, "machine dependent init failed %d", 698 error); 699 ko->ko_loaded = true; 700 } 701 702 /* If there was an error, destroy the whole object. */ 703 if (error != 0) { 704 kobj_unload(ko); 705 } 706 707 return error; 708 } 709 710 /* 711 * kobj_find_section: 712 * 713 * Given a section name, search the loaded object and return 714 * virtual address if present and loaded. 715 */ 716 int 717 kobj_find_section(kobj_t ko, const char *name, void **addr, size_t *size) 718 { 719 int i; 720 721 KASSERT(ko->ko_progtab != NULL); 722 723 for (i = 0; i < ko->ko_nprogtab; i++) { 724 if (strcmp(ko->ko_progtab[i].name, name) == 0) { 725 if (addr != NULL) { 726 *addr = ko->ko_progtab[i].addr; 727 } 728 if (size != NULL) { 729 *size = ko->ko_progtab[i].size; 730 } 731 return 0; 732 } 733 } 734 735 return ENOENT; 736 } 737 738 /* 739 * kobj_jettison: 740 * 741 * Release object data not needed after performing relocations. 742 */ 743 static void 744 kobj_jettison(kobj_t ko) 745 { 746 int i; 747 748 if (ko->ko_reltab != NULL) { 749 for (i = 0; i < ko->ko_nrel; i++) { 750 if (ko->ko_reltab[i].rel) { 751 kobj_free(ko, ko->ko_reltab[i].rel, 752 ko->ko_reltab[i].size); 753 } 754 } 755 kobj_free(ko, ko->ko_reltab, ko->ko_nrel * 756 sizeof(*ko->ko_reltab)); 757 ko->ko_reltab = NULL; 758 ko->ko_nrel = 0; 759 } 760 if (ko->ko_relatab != NULL) { 761 for (i = 0; i < ko->ko_nrela; i++) { 762 if (ko->ko_relatab[i].rela) { 763 kobj_free(ko, ko->ko_relatab[i].rela, 764 ko->ko_relatab[i].size); 765 } 766 } 767 kobj_free(ko, ko->ko_relatab, ko->ko_nrela * 768 sizeof(*ko->ko_relatab)); 769 ko->ko_relatab = NULL; 770 ko->ko_nrela = 0; 771 } 772 if (ko->ko_shdr != NULL) { 773 kobj_free(ko, ko->ko_shdr, ko->ko_shdrsz); 774 ko->ko_shdr = NULL; 775 } 776 } 777 778 /* 779 * kobj_sym_lookup: 780 * 781 * Symbol lookup function to be used when the symbol index 782 * is known (ie during relocation). 783 */ 784 uintptr_t 785 kobj_sym_lookup(kobj_t ko, uintptr_t symidx) 786 { 787 const Elf_Sym *sym; 788 const char *symbol; 789 790 /* Don't even try to lookup the symbol if the index is bogus. */ 791 if (symidx >= ko->ko_symcnt) 792 return 0; 793 794 sym = ko->ko_symtab + symidx; 795 796 /* Quick answer if there is a definition included. */ 797 if (sym->st_shndx != SHN_UNDEF) { 798 return (uintptr_t)sym->st_value; 799 } 800 801 /* If we get here, then it is undefined and needs a lookup. */ 802 switch (ELF_ST_BIND(sym->st_info)) { 803 case STB_LOCAL: 804 /* Local, but undefined? huh? */ 805 kobj_error(ko, "local symbol undefined"); 806 return 0; 807 808 case STB_GLOBAL: 809 /* Relative to Data or Function name */ 810 symbol = ko->ko_strtab + sym->st_name; 811 812 /* Force a lookup failure if the symbol name is bogus. */ 813 if (*symbol == 0) { 814 kobj_error(ko, "bad symbol name"); 815 return 0; 816 } 817 818 return (uintptr_t)sym->st_value; 819 820 case STB_WEAK: 821 kobj_error(ko, "weak symbols not supported"); 822 return 0; 823 824 default: 825 return 0; 826 } 827 } 828 829 /* 830 * kobj_findbase: 831 * 832 * Return base address of the given section. 833 */ 834 static uintptr_t 835 kobj_findbase(kobj_t ko, int sec) 836 { 837 int i; 838 839 for (i = 0; i < ko->ko_nprogtab; i++) { 840 if (sec == ko->ko_progtab[i].sec) { 841 return (uintptr_t)ko->ko_progtab[i].addr; 842 } 843 } 844 return 0; 845 } 846 847 /* 848 * kobj_checksyms: 849 * 850 * Scan symbol table for duplicates or resolve references to 851 * exernal symbols. 852 */ 853 static int 854 kobj_checksyms(kobj_t ko, bool undefined) 855 { 856 unsigned long rval; 857 Elf_Sym *sym, *ms; 858 const char *name; 859 int error; 860 861 error = 0; 862 863 for (ms = (sym = ko->ko_symtab) + ko->ko_symcnt; sym < ms; sym++) { 864 /* Check validity of the symbol. */ 865 if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL || 866 sym->st_name == 0) 867 continue; 868 if (undefined != (sym->st_shndx == SHN_UNDEF)) { 869 continue; 870 } 871 872 /* 873 * Look it up. Don't need to lock, as it is known that 874 * the symbol tables aren't going to change (we hold 875 * module_lock). 876 */ 877 name = ko->ko_strtab + sym->st_name; 878 if (ksyms_getval_unlocked(NULL, name, &rval, 879 KSYMS_EXTERN) != 0) { 880 if (undefined) { 881 kobj_error(ko, "symbol `%s' not found", 882 name); 883 error = ENOEXEC; 884 } 885 continue; 886 } 887 888 /* Save values of undefined globals. */ 889 if (undefined) { 890 sym->st_value = (Elf_Addr)rval; 891 continue; 892 } 893 894 /* Check (and complain) about differing values. */ 895 if (sym->st_value == rval) { 896 continue; 897 } 898 if (strcmp(name, "_bss_start") == 0 || 899 strcmp(name, "__bss_start") == 0 || 900 strcmp(name, "_bss_end__") == 0 || 901 strcmp(name, "__bss_end__") == 0 || 902 strcmp(name, "_edata") == 0 || 903 strcmp(name, "_end") == 0 || 904 strcmp(name, "__end") == 0 || 905 strcmp(name, "__end__") == 0 || 906 strncmp(name, "__start_link_set_", 17) == 0 || 907 strncmp(name, "__stop_link_set_", 16)) { 908 continue; 909 } 910 kobj_error(ko, "global symbol `%s' redefined", 911 name); 912 error = ENOEXEC; 913 } 914 915 return error; 916 } 917 918 /* 919 * kobj_relocate: 920 * 921 * Resolve relocations for the loaded object. 922 */ 923 static int 924 kobj_relocate(kobj_t ko, bool local) 925 { 926 const Elf_Rel *rellim; 927 const Elf_Rel *rel; 928 const Elf_Rela *relalim; 929 const Elf_Rela *rela; 930 const Elf_Sym *sym; 931 uintptr_t base; 932 int i, error; 933 uintptr_t symidx; 934 935 /* 936 * Perform relocations without addend if there are any. 937 */ 938 for (i = 0; i < ko->ko_nrel; i++) { 939 rel = ko->ko_reltab[i].rel; 940 if (rel == NULL) { 941 continue; 942 } 943 rellim = rel + ko->ko_reltab[i].nrel; 944 base = kobj_findbase(ko, ko->ko_reltab[i].sec); 945 if (base == 0) { 946 panic("%s:%d: %s: lost base for e_reltab[%d] sec %d", 947 __func__, __LINE__, ko->ko_name, i, 948 ko->ko_reltab[i].sec); 949 } 950 for (; rel < rellim; rel++) { 951 symidx = ELF_R_SYM(rel->r_info); 952 if (symidx >= ko->ko_symcnt) { 953 continue; 954 } 955 sym = ko->ko_symtab + symidx; 956 if (local != (ELF_ST_BIND(sym->st_info) == STB_LOCAL)) { 957 continue; 958 } 959 error = kobj_reloc(ko, base, rel, false, local); 960 if (error != 0) { 961 return ENOENT; 962 } 963 } 964 } 965 966 /* 967 * Perform relocations with addend if there are any. 968 */ 969 for (i = 0; i < ko->ko_nrela; i++) { 970 rela = ko->ko_relatab[i].rela; 971 if (rela == NULL) { 972 continue; 973 } 974 relalim = rela + ko->ko_relatab[i].nrela; 975 base = kobj_findbase(ko, ko->ko_relatab[i].sec); 976 if (base == 0) { 977 panic("%s:%d: %s: lost base for e_relatab[%d] sec %d", 978 __func__, __LINE__, ko->ko_name, i, 979 ko->ko_relatab[i].sec); 980 } 981 for (; rela < relalim; rela++) { 982 symidx = ELF_R_SYM(rela->r_info); 983 if (symidx >= ko->ko_symcnt) { 984 continue; 985 } 986 sym = ko->ko_symtab + symidx; 987 if (local != (ELF_ST_BIND(sym->st_info) == STB_LOCAL)) { 988 continue; 989 } 990 error = kobj_reloc(ko, base, rela, true, local); 991 if (error != 0) { 992 return ENOENT; 993 } 994 } 995 } 996 997 return 0; 998 } 999 1000 /* 1001 * kobj_out: 1002 * 1003 * Utility function: log an error. 1004 */ 1005 static void 1006 kobj_out(const char *fname, int lnum, kobj_t ko, const char *fmt, ...) 1007 { 1008 va_list ap; 1009 1010 printf("%s, %d: [%s]: linker error: ", fname, lnum, ko->ko_name); 1011 va_start(ap, fmt); 1012 vprintf(fmt, ap); 1013 va_end(ap); 1014 printf("\n"); 1015 } 1016 1017 static int 1018 kobj_read_mem(kobj_t ko, void **basep, size_t size, off_t off, 1019 bool allocate) 1020 { 1021 void *base = *basep; 1022 int error; 1023 1024 if (ko->ko_memsize != -1 && off + size > ko->ko_memsize) { 1025 kobj_error(ko, "preloaded object short"); 1026 error = EINVAL; 1027 base = NULL; 1028 } else if (allocate) { 1029 base = (uint8_t *)ko->ko_source + off; 1030 error = 0; 1031 } else if ((uint8_t *)base != (uint8_t *)ko->ko_source + off) { 1032 kobj_error(ko, "object not aligned"); 1033 kobj_error(ko, "source=%p base=%p off=%d " 1034 "size=%zu", ko->ko_source, base, (int)off, size); 1035 error = EINVAL; 1036 } else { 1037 /* Nothing to do. Loading in-situ. */ 1038 error = 0; 1039 } 1040 1041 if (allocate) 1042 *basep = base; 1043 1044 return error; 1045 } 1046 1047 /* 1048 * kobj_free: 1049 * 1050 * Utility function: free memory if it was allocated from the heap. 1051 */ 1052 static void 1053 kobj_free(kobj_t ko, void *base, size_t size) 1054 { 1055 1056 if (ko->ko_type != KT_MEMORY) 1057 kmem_free(base, size); 1058 } 1059 1060 extern char module_base[]; 1061 1062 void 1063 kobj_setname(kobj_t ko, const char *name) 1064 { 1065 const char *d = name, *dots = ""; 1066 size_t len, dlen; 1067 1068 for (char *s = module_base; *d == *s; d++, s++) 1069 continue; 1070 1071 if (d == name) 1072 name = ""; 1073 else 1074 name = "%M"; 1075 dlen = strlen(d); 1076 len = dlen + strlen(name); 1077 if (len >= sizeof(ko->ko_name)) { 1078 len = (len - sizeof(ko->ko_name)) + 5; /* dots + NUL */ 1079 if (dlen >= len) { 1080 d += len; 1081 dots = "/..."; 1082 } 1083 } 1084 snprintf(ko->ko_name, sizeof(ko->ko_name), "%s%s%s", name, dots, d); 1085 } 1086 1087 #else /* MODULAR */ 1088 1089 int 1090 kobj_load_mem(kobj_t *kop, const char *name, void *base, ssize_t size) 1091 { 1092 1093 return ENOSYS; 1094 } 1095 1096 void 1097 kobj_unload(kobj_t ko) 1098 { 1099 1100 panic("not modular"); 1101 } 1102 1103 int 1104 kobj_stat(kobj_t ko, vaddr_t *base, size_t *size) 1105 { 1106 1107 return ENOSYS; 1108 } 1109 1110 int 1111 kobj_affix(kobj_t ko, const char *name) 1112 { 1113 1114 panic("not modular"); 1115 } 1116 1117 int 1118 kobj_find_section(kobj_t ko, const char *name, void **addr, size_t *size) 1119 { 1120 1121 panic("not modular"); 1122 } 1123 1124 void 1125 kobj_setname(kobj_t ko, const char *name) 1126 { 1127 1128 panic("not modular"); 1129 } 1130 1131 #endif /* MODULAR */ 1132