wrapper device driver

riya khanna riyakhanna1983 at gmail.com
Mon Feb 2 17:04:21 EST 2015


struct real_dev->f_op would not be made available to the userspace.
It's for target/real device bookkeeping.

On Mon, Feb 2, 2015 at 4:02 PM,  <Valdis.Kletnieks at vt.edu> wrote:
> On Mon, 02 Feb 2015 15:24:37 -0600, riya khanna said:
>> Hi,
>>
>> I'm writing a device driver to to provide a wrapper device around a
>> real device. Is it acceptable to do the following:
>>
>> wrapper_dev_open(flags) {
>>    // do additional bookkeeping
>>    real_dev_filp = filp_open(real_device_node_path, flags);
>> }
>>
>> wrapper_dev_mmap(mmap_parameters) {
>>    // do additional checks
>>    return real_dev_filp->f_op->mmap(mmap_parameters);
>> }
>>
>> wrapper_dev_ioctl(ioctl_parameters) {
>>    // do additional checks
>>    return real_dev_filp->f_op->ioctl(ioctl_parameters);
>> }
>>
>> Is it safe to do something like this?
>
> Probably not.  If you return a struct real_dev->f_op then any further
> calls will vector through that structure, totally unseen to your wrapper,
> which means you won't be able to provide whatever added-value extras the
> wrapper is trying to do (in other words, your wrapper ends up not doing
> anything).
>
> The real fun starts when something calls real->f_op->close() out from
> under you... :)



More information about the Kernelnewbies mailing list