Re: Convert UIO_USERSPACE64 uio to a UIO_USERSPACE32 uio
Re: Convert UIO_USERSPACE64 uio to a UIO_USERSPACE32 uio
- Subject: Re: Convert UIO_USERSPACE64 uio to a UIO_USERSPACE32 uio
- From: Ken Hornstein <email@hidden>
- Date: Wed, 07 Apr 2010 08:12:53 -0400
>I am not sure this is possible but here goes. I am working on a
>filesystem kernel driver on a 10.6 32bit kernel userspace application
>can send me write request (vnop_write_desc) with a UIO_USERSPACE64 uio.
>In my code path I pass this uio to the physio() function which try to
>assign the iovec to a bp->b_datap, to do so it CASTDOWN the 64bit
>iov_base address to 32bit breaking it.
>
>So my question on a 32bit kernel is it possible to transform a 64bit
>userspace uio to a 32bit userspace uio?
Hmmm ... I'm not the expert, but I don't see a way to make that happen.
I see what you mean ... b_datap is a uintptr_t, and I suppose it really
should be a user_addr_t.
I would guess that your only solution is to either compile your userspace
applications be 32-bit (which would suck) or create a bounce buffer in
your filesystem driver where you can use uiomove to get your data into the
kernel address space and then use physio (which also sucks, but probably
sucks less).
--Ken
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-kernel mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden