Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Apr 2013 19:15:59 +0200
From:      Oliver Pinter <oliver.pntr@gmail.com>
To:        Vijay Singh <vijju.singh@gmail.com>
Cc:        hackers@freebsd.org
Subject:   Re: copyinstr()
Message-ID:  <CAPjTQNG-jVyA2K8Oo1q%2BkQZNTU1zj10VPYDXkHVysA-29Ovmfw@mail.gmail.com>
In-Reply-To: <CALCNsJTtf5UCwGXb5eO8kESQG9GFqyT8%2B6BXdTjfzJ%2BjLW=_CQ@mail.gmail.com>
References:  <CALCNsJTtf5UCwGXb5eO8kESQG9GFqyT8%2B6BXdTjfzJ%2BjLW=_CQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 4/9/13, Vijay Singh <vijju.singh@gmail.com> wrote:
> Hi, I was looking for some help with copyinstr() on an amd64 platform.
>
> My from address happens to be in the kernel (stack). I am getting an
> EFAULT, and I am wondering how to fix that.
>
> Would using memory from malloc() make a difference?

The copyinstr check the address before do anything.

amd64/support.S:

/*
 * copyinstr(from, to, maxlen, int *lencopied) - MP SAFE
 *           %rdi, %rsi, %rdx, %rcx
 *
 *      copy a string from from to to, stop when a 0 character is reached.
 *      return ENAMETOOLONG if string is longer than maxlen, and
 *      EFAULT on protection violations. If lencopied is non-zero,
 *      return the actual length in *lencopied.
 */
ENTRY(copyinstr)
        movq    %rdx,%r8                        /* %r8 = maxlen */
        movq    %rcx,%r9                        /* %r9 = *len */
        xchgq   %rdi,%rsi                       /* %rdi = from, %rsi = to */
        movq    PCPU(CURPCB),%rcx
        movq    $cpystrflt,PCB_ONFAULT(%rcx)

        movq    $VM_MAXUSER_ADDRESS,%rax

        /* make sure 'from' is within bounds */
        subq    %rsi,%rax
        jbe     cpystrfl

       [...]

       cpystrflt:
        movq    $EFAULT,%rax

       [...]

Try copyout() instead of copyinstr(), as there in amd64 are no copyoutstr().

>
> -vijay
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPjTQNG-jVyA2K8Oo1q%2BkQZNTU1zj10VPYDXkHVysA-29Ovmfw>