Noam,
I have committed the change. Many thanks, Luca

Noam Dev wrote:
> Hi Luca,
>
> There is a slight problem in the way you implemented my fix.
> By adding sizeof(struct sk_filter) to fsize, you do allocate the
> correct amount of memory.
> However, this causes more bytes to be copied in the call
>
> copy_from_user(filter->insns, fprog.filter, fsize)
>
> If fsize represents the size of the BPF instructions, you dont need to
> add the sk_filter header to it.
>
> Have a look at the copy_from_user call i just mentioned. You copy to
> filter->insns, which is 8 bytes after the begginning of filter.
> You allocated 'fsize' bytes to filter (filter = kmalloc(fsize,
> GFP_KERNEL)). When you copy 'fsize' bytes to filter starting at offset
> 8, you still write to 8 bytes of uncharted territory.
>
> fsize was calculated correctly before, but the kmalloc call needs to
> add sizeof(struct sk_filter) bytes to it, so that when you copy
> 'fsize' bytes to filter->insns (which is 8 bytes after filter), you
> will be writing to allocated memory.
>
> I would change the two lines into
> fsize = sizeof(struct sock_filter) * fprog.len;
> filter = kmalloc(fsize + sizeof(struct sk_filter), GFP_KERNEL);
>
> This is how i implemented it and it works all of the time.
> ------------------------------------------------------------------------
>
> _______________________________________________
> Ntop-misc mailing list
> [email protected]
> http://listgateway.unipi.it/mailman/listinfo/ntop-misc
>   


-- 
Luca Deri <[EMAIL PROTECTED]>   http://luca.ntop.org/
                                skype://lucaderi/
Don't be encumbered by past history. Go off and do
something wonderful - Robert Noyce

_______________________________________________
Ntop-misc mailing list
[email protected]
http://listgateway.unipi.it/mailman/listinfo/ntop-misc

Reply via email to