Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 Feb 2014 00:40:00 GMT
From:      Shawn Webb <lattera@gmail.com>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/181497: [kernel] [patch] Add ASLR feature to kernel
Message-ID:  <201402100040.s1A0e0WJ065164@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/181497; it has been noted by GNATS.

From: Shawn Webb <lattera@gmail.com>
To: bug-followup@FreeBSD.org,
 steven@roothosts.com
Cc:  
Subject: Re: kern/181497: [kernel] [patch] Add ASLR feature to kernel
Date: Sun, 9 Feb 2014 19:37:03 -0500

 --Apple-Mail=_C84F0573-719D-4AC2-8D2A-DD418EFCAAE8
 Content-Transfer-Encoding: quoted-printable
 Content-Type: text/plain;
 	charset=us-ascii
 
 Attached is a patch that applies on top of the existing patch to fix a =
 few minor bugs.
 
 Thanks,
 
 Shawn
 
 
 --Apple-Mail=_C84F0573-719D-4AC2-8D2A-DD418EFCAAE8
 Content-Disposition: attachment;
 	filename=aslr-2014-02-09.patch.txt
 Content-Type: text/plain;
 	x-unix-mode=0644;
 	name="aslr-2014-02-09.patch.txt"
 Content-Transfer-Encoding: quoted-printable
 
 diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c
 index 3f9487c..3a36f20 100644
 --- a/sys/kern/imgact_elf.c
 +++ b/sys/kern/imgact_elf.c
 @@ -603,7 +603,9 @@ __elfN(load_file)(struct proc *p, const char *file, =
 u_long *addr,
  	u_long rbase;
  	u_long base_addr =3D 0;
  	int error, i, numsegs;
 -    struct prison *pr; /* For ASLR */
 +#ifdef PAX_ASLR
 +    struct prison *pr;
 +#endif
 =20
  #ifdef CAPABILITY_MODE
  	/*
 @@ -659,22 +661,21 @@ __elfN(load_file)(struct proc *p, const char =
 *file, u_long *addr,
  	hdr =3D (const Elf_Ehdr *)imgp->image_header;
  	if ((error =3D __elfN(check_header)(hdr)) !=3D 0)
  		goto fail;
 -	if (hdr->e_type =3D=3D ET_DYN)
 +	if (hdr->e_type =3D=3D ET_DYN) {
  		rbase =3D *addr;
 -	else if (hdr->e_type =3D=3D ET_EXEC)
 +#ifdef PAX_ASLR
 +        pr =3D pax_aslr_get_prison(NULL, imgp->proc);
 +        if (pax_aslr_active(NULL, imgp->proc)) {
 +            rbase +=3D round_page(PAX_ASLR_DELTA(arc4random(), =
 PAX_ASLR_DELTA_EXEC_LSB, pr->pr_pax_aslr_exec_len));
 +        }
 +#endif
 +    } else if (hdr->e_type =3D=3D ET_EXEC) {
  		rbase =3D 0;
 -	else {
 +    } else {
  		error =3D ENOEXEC;
  		goto fail;
  	}
 =20
 -#ifdef PAX_ASLR
 -    pr =3D pax_aslr_get_prison(NULL, imgp->proc);
 -    if (pax_aslr_active(NULL, imgp->proc)) {
 -        rbase +=3D round_page(PAX_ASLR_DELTA(arc4random(), =
 PAX_ASLR_DELTA_EXEC_LSB, pr->pr_pax_aslr_exec_len));
 -    }
 -#endif
 -
  	/* Only support headers that fit within first page for now      =
 */
  	if ((hdr->e_phoff > PAGE_SIZE) ||
  	    (u_int)hdr->e_phentsize * hdr->e_phnum > PAGE_SIZE - =
 hdr->e_phoff) {
 diff --git a/sys/kern/kern_pax.c b/sys/kern/kern_pax.c
 index 9182606..7654e5b 100644
 --- a/sys/kern/kern_pax.c
 +++ b/sys/kern/kern_pax.c
 @@ -528,7 +528,6 @@ pax_aslr_init(struct thread *td, struct image_params =
 *imgp)
      vm->vm_aslr_delta_stack =3D PAX_ASLR_DELTA(arc4random(),
          PAX_ASLR_DELTA_STACK_LSB, (pr !=3D NULL) ? =
 pr->pr_pax_aslr_stack_len : pax_aslr_stack_len);
      vm->vm_aslr_delta_stack =3D ALIGN(vm->vm_aslr_delta_stack);
 -    vm->vm_aslr_delta_exec =3D round_page(PAX_ASLR_DELTA(arc4random(), =
 PAX_ASLR_DELTA_EXEC_LSB, (pr !=3D NULL) ? pr->pr_pax_aslr_exec_len : =
 pax_aslr_exec_len));
  #else /* COMPAT_FREEBSD32 */
      if ((sv_flags & SV_LP64) !=3D 0) {
          vm->vm_aslr_delta_mmap =3D PAX_ASLR_DELTA(arc4random(),
 
 --Apple-Mail=_C84F0573-719D-4AC2-8D2A-DD418EFCAAE8--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402100040.s1A0e0WJ065164>