net/netfilter/nf_sockopt.c

  1.  /* Call get/setsockopt() */
  2.  static int nf_sockopt(struct sock *sk, int pf, int val,
  3.   char __user *opt, int *len, int get)
  4.  {
  5.   struct nf_sockopt_ops *ops;
  6.   int ret;
  7.  
  8.   ops = nf_sockopt_find(sk, pf, val, get);
  9.   if (IS_ERR(ops))
  10.   return PTR_ERR(ops);
  11.  
  12.   if (get)
  13.   ret = ops->get(sk, val, opt, len);
  14.   else
  15.   ret = ops->set(sk, val, opt, *len);
  16.  
  17.   module_put(ops->owner);
  18.   return ret;
  19.  }