svn commit: r226368 - stable/9/sys/kern
Xin LI
delphij at FreeBSD.org
Fri Oct 14 22:33:39 UTC 2011
Author: delphij
Date: Fri Oct 14 22:33:39 2011
New Revision: 226368
URL: http://svn.freebsd.org/changeset/base/226368
Log:
MFC r226082:
Return proper errno when we hit error when doing sanity check.
This fixes dtrace crashes when module is not compiled with CTF
data.
Submitted by: Paul Ambrose ambrosehua at gmail.com
Approved by: re (kib)
Modified:
stable/9/sys/kern/kern_ctf.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/amd64/include/xen/ (props changed)
stable/9/sys/boot/ (props changed)
stable/9/sys/boot/i386/efi/ (props changed)
stable/9/sys/boot/ia64/efi/ (props changed)
stable/9/sys/boot/ia64/ski/ (props changed)
stable/9/sys/boot/powerpc/boot1.chrp/ (props changed)
stable/9/sys/boot/powerpc/ofw/ (props changed)
stable/9/sys/cddl/contrib/opensolaris/ (props changed)
stable/9/sys/conf/ (props changed)
stable/9/sys/contrib/dev/acpica/ (props changed)
stable/9/sys/contrib/octeon-sdk/ (props changed)
stable/9/sys/contrib/pf/ (props changed)
stable/9/sys/contrib/x86emu/ (props changed)
Modified: stable/9/sys/kern/kern_ctf.c
==============================================================================
--- stable/9/sys/kern/kern_ctf.c Fri Oct 14 19:05:26 2011 (r226367)
+++ stable/9/sys/kern/kern_ctf.c Fri Oct 14 22:33:39 2011 (r226368)
@@ -164,8 +164,13 @@ link_elf_ctf_get(linker_file_t lf, linke
* section names aren't present, then we can't locate the
* .SUNW_ctf section containing the CTF data.
*/
- if (hdr->e_shstrndx == 0 || shdr[hdr->e_shstrndx].sh_type != SHT_STRTAB)
+ if (hdr->e_shstrndx == 0 || shdr[hdr->e_shstrndx].sh_type != SHT_STRTAB) {
+ printf("%s(%d): module %s e_shstrndx is %d, sh_type is %d\n",
+ __func__, __LINE__, lf->pathname, hdr->e_shstrndx,
+ shdr[hdr->e_shstrndx].sh_type);
+ error = EFTYPE;
goto out;
+ }
/* Allocate memory to buffer the section header strings. */
if ((shstrtab = malloc(shdr[hdr->e_shstrndx].sh_size, M_LINKER,
@@ -187,8 +192,12 @@ link_elf_ctf_get(linker_file_t lf, linke
break;
/* Check if the CTF section wasn't found. */
- if (i >= hdr->e_shnum)
+ if (i >= hdr->e_shnum) {
+ printf("%s(%d): module %s has no .SUNW_ctf section\n",
+ __func__, __LINE__, lf->pathname);
+ error = EFTYPE;
goto out;
+ }
/* Read the CTF header. */
if ((error = vn_rdwr(UIO_READ, nd.ni_vp, ctf_hdr, sizeof(ctf_hdr),
@@ -197,12 +206,21 @@ link_elf_ctf_get(linker_file_t lf, linke
goto out;
/* Check the CTF magic number. (XXX check for big endian!) */
- if (ctf_hdr[0] != 0xf1 || ctf_hdr[1] != 0xcf)
+ if (ctf_hdr[0] != 0xf1 || ctf_hdr[1] != 0xcf) {
+ printf("%s(%d): module %s has invalid format\n",
+ __func__, __LINE__, lf->pathname);
+ error = EFTYPE;
goto out;
+ }
/* Check if version 2. */
- if (ctf_hdr[2] != 2)
+ if (ctf_hdr[2] != 2) {
+ printf("%s(%d): module %s CTF format version is %d "
+ "(2 expected)\n",
+ __func__, __LINE__, lf->pathname, ctf_hdr[2]);
+ error = EFTYPE;
goto out;
+ }
/* Check if the data is compressed. */
if ((ctf_hdr[3] & 0x1) != 0) {
More information about the svn-src-stable-9
mailing list