diff options
Diffstat (limited to 'sys/kern/imgact_elf.c')
| -rw-r--r-- | sys/kern/imgact_elf.c | 12 | 
1 files changed, 6 insertions, 6 deletions
| diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c index c53707a1286c..779158b41221 100644 --- a/sys/kern/imgact_elf.c +++ b/sys/kern/imgact_elf.c @@ -231,7 +231,7 @@ static const Elf_Brandinfo *elf_brand_list[MAX_BRANDS];  #define	aligned(a, t)	(rounddown2((u_long)(a), sizeof(t)) == (u_long)(a)) -Elf_Brandnote __elfN(freebsd_brandnote) = { +const Elf_Brandnote __elfN(freebsd_brandnote) = {  	.hdr.n_namesz	= sizeof(FREEBSD_ABI_VENDOR),  	.hdr.n_descsz	= sizeof(int32_t),  	.hdr.n_type	= NT_FREEBSD_ABI_TAG, @@ -254,7 +254,7 @@ __elfN(freebsd_trans_osrel)(const Elf_Note *note, int32_t *osrel)  static int GNU_KFREEBSD_ABI_DESC = 3; -Elf_Brandnote __elfN(kfreebsd_brandnote) = { +const Elf_Brandnote __elfN(kfreebsd_brandnote) = {  	.hdr.n_namesz	= sizeof(GNU_ABI_VENDOR),  	.hdr.n_descsz	= 16,	/* XXX at least 16 */  	.hdr.n_type	= 1, @@ -2831,7 +2831,7 @@ __elfN(parse_notes)(const struct image_params *imgp, const Elf_Note *checknote,  		}  		if ((const char *)note_end - (const char *)note <  		    sizeof(Elf_Note)) { -			uprintf("ELF note to short\n"); +			uprintf("ELF note too short\n");  			goto retf;  		}  		if (note->n_namesz != checknote->n_namesz || @@ -2839,9 +2839,9 @@ __elfN(parse_notes)(const struct image_params *imgp, const Elf_Note *checknote,  		    note->n_type != checknote->n_type)  			goto nextnote;  		note_name = (const char *)(note + 1); -		if (note_name + checknote->n_namesz >= -		    (const char *)note_end || strncmp(note_vendor, -		    note_name, checknote->n_namesz) != 0) +		if (note_name + roundup2(note->n_namesz, ELF_NOTE_ROUNDSIZE) + +		    note->n_descsz >= (const char *)note_end || +		    strncmp(note_vendor, note_name, checknote->n_namesz) != 0)  			goto nextnote;  		if (cb(note, cb_arg, &res)) | 
