@ -937,31 +937,20 @@ void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)
/* try to charge the socket memory if there is space available
* return true on success
*/
static bool __ sk_filter_charge( struct sock * sk , struct sk_filter * fp )
bool sk_filter_charge( struct sock * sk , struct sk_filter * fp )
{
u32 filter_size = bpf_prog_size ( fp - > prog - > len ) ;
/* same check as in sock_kmalloc() */
if ( filter_size < = sysctl_optmem_max & &
atomic_read ( & sk - > sk_omem_alloc ) + filter_size < sysctl_optmem_max ) {
atomic_inc ( & fp - > refcnt ) ;
atomic_add ( filter_size , & sk - > sk_omem_alloc ) ;
return true ;
}
return false ;
}
bool sk_filter_charge ( struct sock * sk , struct sk_filter * fp )
{
if ( ! atomic_inc_not_zero ( & fp - > refcnt ) )
return false ;
if ( ! __sk_filter_charge ( sk , fp ) ) {
sk_filter_release ( fp ) ;
return false ;
}
return true ;
}
static struct bpf_prog * bpf_migrate_filter ( struct bpf_prog * fp )
{
struct sock_filter * old_prog ;