sock.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:27k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * INET An implementation of the TCP/IP protocol suite for the LINUX
  3.  * operating system.  INET is implemented using the  BSD Socket
  4.  * interface as the means of communication with the user level.
  5.  *
  6.  * Generic socket support routines. Memory allocators, socket lock/release
  7.  * handler for protocols to use and generic option handler.
  8.  *
  9.  *
  10.  * Version: $Id: sock.c,v 1.116 2001/11/08 04:20:06 davem Exp $
  11.  *
  12.  * Authors: Ross Biro, <bir7@leland.Stanford.Edu>
  13.  * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  14.  * Florian La Roche, <flla@stud.uni-sb.de>
  15.  * Alan Cox, <A.Cox@swansea.ac.uk>
  16.  *
  17.  * Fixes:
  18.  * Alan Cox :  Numerous verify_area() problems
  19.  * Alan Cox : Connecting on a connecting socket
  20.  * now returns an error for tcp.
  21.  * Alan Cox : sock->protocol is set correctly.
  22.  * and is not sometimes left as 0.
  23.  * Alan Cox : connect handles icmp errors on a
  24.  * connect properly. Unfortunately there
  25.  * is a restart syscall nasty there. I
  26.  * can't match BSD without hacking the C
  27.  * library. Ideas urgently sought!
  28.  * Alan Cox : Disallow bind() to addresses that are
  29.  * not ours - especially broadcast ones!!
  30.  * Alan Cox : Socket 1024 _IS_ ok for users. (fencepost)
  31.  * Alan Cox : sock_wfree/sock_rfree don't destroy sockets,
  32.  * instead they leave that for the DESTROY timer.
  33.  * Alan Cox : Clean up error flag in accept
  34.  * Alan Cox : TCP ack handling is buggy, the DESTROY timer
  35.  * was buggy. Put a remove_sock() in the handler
  36.  * for memory when we hit 0. Also altered the timer
  37.  * code. The ACK stuff can wait and needs major 
  38.  * TCP layer surgery.
  39.  * Alan Cox : Fixed TCP ack bug, removed remove sock
  40.  * and fixed timer/inet_bh race.
  41.  * Alan Cox : Added zapped flag for TCP
  42.  * Alan Cox : Move kfree_skb into skbuff.c and tidied up surplus code
  43.  * Alan Cox : for new sk_buff allocations wmalloc/rmalloc now call alloc_skb
  44.  * Alan Cox : kfree_s calls now are kfree_skbmem so we can track skb resources
  45.  * Alan Cox : Supports socket option broadcast now as does udp. Packet and raw need fixing.
  46.  * Alan Cox : Added RCVBUF,SNDBUF size setting. It suddenly occurred to me how easy it was so...
  47.  * Rick Sladkey : Relaxed UDP rules for matching packets.
  48.  * C.E.Hawkins : IFF_PROMISC/SIOCGHWADDR support
  49.  * Pauline Middelink : identd support
  50.  * Alan Cox : Fixed connect() taking signals I think.
  51.  * Alan Cox : SO_LINGER supported
  52.  * Alan Cox : Error reporting fixes
  53.  * Anonymous : inet_create tidied up (sk->reuse setting)
  54.  * Alan Cox : inet sockets don't set sk->type!
  55.  * Alan Cox : Split socket option code
  56.  * Alan Cox : Callbacks
  57.  * Alan Cox : Nagle flag for Charles & Johannes stuff
  58.  * Alex : Removed restriction on inet fioctl
  59.  * Alan Cox : Splitting INET from NET core
  60.  * Alan Cox : Fixed bogus SO_TYPE handling in getsockopt()
  61.  * Adam Caldwell : Missing return in SO_DONTROUTE/SO_DEBUG code
  62.  * Alan Cox : Split IP from generic code
  63.  * Alan Cox : New kfree_skbmem()
  64.  * Alan Cox : Make SO_DEBUG superuser only.
  65.  * Alan Cox : Allow anyone to clear SO_DEBUG
  66.  * (compatibility fix)
  67.  * Alan Cox : Added optimistic memory grabbing for AF_UNIX throughput.
  68.  * Alan Cox : Allocator for a socket is settable.
  69.  * Alan Cox : SO_ERROR includes soft errors.
  70.  * Alan Cox : Allow NULL arguments on some SO_ opts
  71.  * Alan Cox :  Generic socket allocation to make hooks
  72.  * easier (suggested by Craig Metz).
  73.  * Michael Pall : SO_ERROR returns positive errno again
  74.  *              Steve Whitehouse:       Added default destructor to free
  75.  *                                      protocol private data.
  76.  *              Steve Whitehouse:       Added various other default routines
  77.  *                                      common to several socket families.
  78.  *              Chris Evans     :       Call suser() check last on F_SETOWN
  79.  * Jay Schulist : Added SO_ATTACH_FILTER and SO_DETACH_FILTER.
  80.  * Andi Kleen : Add sock_kmalloc()/sock_kfree_s()
  81.  * Andi Kleen : Fix write_space callback
  82.  * Chris Evans : Security fixes - signedness again
  83.  * Arnaldo C. Melo :       cleanups, use skb_queue_purge
  84.  *
  85.  * To Fix:
  86.  *
  87.  *
  88.  * This program is free software; you can redistribute it and/or
  89.  * modify it under the terms of the GNU General Public License
  90.  * as published by the Free Software Foundation; either version
  91.  * 2 of the License, or (at your option) any later version.
  92.  */
  93. #include <linux/config.h>
  94. #include <linux/errno.h>
  95. #include <linux/types.h>
  96. #include <linux/socket.h>
  97. #include <linux/in.h>
  98. #include <linux/kernel.h>
  99. #include <linux/major.h>
  100. #include <linux/sched.h>
  101. #include <linux/timer.h>
  102. #include <linux/string.h>
  103. #include <linux/sockios.h>
  104. #include <linux/net.h>
  105. #include <linux/fcntl.h>
  106. #include <linux/mm.h>
  107. #include <linux/slab.h>
  108. #include <linux/interrupt.h>
  109. #include <linux/poll.h>
  110. #include <linux/tcp.h>
  111. #include <linux/init.h>
  112. #include <asm/uaccess.h>
  113. #include <asm/system.h>
  114. #include <linux/netdevice.h>
  115. #include <net/protocol.h>
  116. #include <linux/skbuff.h>
  117. #include <net/sock.h>
  118. #include <linux/ipsec.h>
  119. #ifdef CONFIG_FILTER
  120. #include <linux/filter.h>
  121. #endif
  122. #ifdef CONFIG_INET
  123. #include <net/tcp.h>
  124. #endif
  125. /* Run time adjustable parameters. */
  126. __u32 sysctl_wmem_max = SK_WMEM_MAX;
  127. __u32 sysctl_rmem_max = SK_RMEM_MAX;
  128. __u32 sysctl_wmem_default = SK_WMEM_MAX;
  129. __u32 sysctl_rmem_default = SK_RMEM_MAX;
  130. /* Maximal space eaten by iovec or ancilliary data plus some space */
  131. int sysctl_optmem_max = sizeof(unsigned long)*(2*UIO_MAXIOV + 512);
  132. static int sock_set_timeout(long *timeo_p, char *optval, int optlen)
  133. {
  134. struct timeval tv;
  135. if (optlen < sizeof(tv))
  136. return -EINVAL;
  137. if (copy_from_user(&tv, optval, sizeof(tv)))
  138. return -EFAULT;
  139. *timeo_p = MAX_SCHEDULE_TIMEOUT;
  140. if (tv.tv_sec == 0 && tv.tv_usec == 0)
  141. return 0;
  142. if (tv.tv_sec < (MAX_SCHEDULE_TIMEOUT/HZ - 1))
  143. *timeo_p = tv.tv_sec*HZ + (tv.tv_usec+(1000000/HZ-1))/(1000000/HZ);
  144. return 0;
  145. }
  146. /*
  147.  * This is meant for all protocols to use and covers goings on
  148.  * at the socket level. Everything here is generic.
  149.  */
  150. int sock_setsockopt(struct socket *sock, int level, int optname,
  151.     char *optval, int optlen)
  152. {
  153. struct sock *sk=sock->sk;
  154. #ifdef CONFIG_FILTER
  155. struct sk_filter *filter;
  156. #endif
  157. int val;
  158. int valbool;
  159. struct linger ling;
  160. int ret = 0;
  161. /*
  162.  * Options without arguments
  163.  */
  164. #ifdef SO_DONTLINGER /* Compatibility item... */
  165. switch(optname)
  166. {
  167. case SO_DONTLINGER:
  168. sk->linger=0;
  169. return 0;
  170. }
  171. #endif
  172.    if(optlen<sizeof(int))
  173.    return(-EINVAL);
  174.   
  175. if (get_user(val, (int *)optval))
  176. return -EFAULT;
  177.    valbool = val?1:0;
  178. lock_sock(sk);
  179.    switch(optname) 
  180.    {
  181. case SO_DEBUG:
  182. if(val && !capable(CAP_NET_ADMIN))
  183. {
  184. ret = -EACCES;
  185. }
  186. else
  187. sk->debug=valbool;
  188. break;
  189. case SO_REUSEADDR:
  190. sk->reuse = valbool;
  191. break;
  192. case SO_TYPE:
  193. case SO_ERROR:
  194. ret = -ENOPROTOOPT;
  195.    break;
  196. case SO_DONTROUTE:
  197. sk->localroute=valbool;
  198. break;
  199. case SO_BROADCAST:
  200. sk->broadcast=valbool;
  201. break;
  202. case SO_SNDBUF:
  203. /* Don't error on this BSD doesn't and if you think
  204.    about it this is right. Otherwise apps have to
  205.    play 'guess the biggest size' games. RCVBUF/SNDBUF
  206.    are treated in BSD as hints */
  207.    
  208. if (val > sysctl_wmem_max)
  209. val = sysctl_wmem_max;
  210. sk->userlocks |= SOCK_SNDBUF_LOCK;
  211. if ((val * 2) < SOCK_MIN_SNDBUF)
  212. sk->sndbuf = SOCK_MIN_SNDBUF;
  213. else
  214. sk->sndbuf = (val * 2);
  215. /*
  216.  * Wake up sending tasks if we
  217.  * upped the value.
  218.  */
  219. sk->write_space(sk);
  220. break;
  221. case SO_RCVBUF:
  222. /* Don't error on this BSD doesn't and if you think
  223.    about it this is right. Otherwise apps have to
  224.    play 'guess the biggest size' games. RCVBUF/SNDBUF
  225.    are treated in BSD as hints */
  226.   
  227. if (val > sysctl_rmem_max)
  228. val = sysctl_rmem_max;
  229. sk->userlocks |= SOCK_RCVBUF_LOCK;
  230. /* FIXME: is this lower bound the right one? */
  231. if ((val * 2) < SOCK_MIN_RCVBUF)
  232. sk->rcvbuf = SOCK_MIN_RCVBUF;
  233. else
  234. sk->rcvbuf = (val * 2);
  235. break;
  236. case SO_KEEPALIVE:
  237. #ifdef CONFIG_INET
  238. if (sk->protocol == IPPROTO_TCP)
  239. {
  240. tcp_set_keepalive(sk, valbool);
  241. }
  242. #endif
  243. sk->keepopen = valbool;
  244. break;
  245.   case SO_OOBINLINE:
  246. sk->urginline = valbool;
  247. break;
  248.   case SO_NO_CHECK:
  249. sk->no_check = valbool;
  250. break;
  251. case SO_PRIORITY:
  252. if ((val >= 0 && val <= 6) || capable(CAP_NET_ADMIN)) 
  253. sk->priority = val;
  254. else
  255. ret = -EPERM;
  256. break;
  257. case SO_LINGER:
  258. if(optlen<sizeof(ling)) {
  259. ret = -EINVAL; /* 1003.1g */
  260. break;
  261. }
  262. if (copy_from_user(&ling,optval,sizeof(ling))) {
  263. ret = -EFAULT;
  264. break;
  265. }
  266. if(ling.l_onoff==0) {
  267. sk->linger=0;
  268. } else {
  269. #if (BITS_PER_LONG == 32)
  270. if (ling.l_linger >= MAX_SCHEDULE_TIMEOUT/HZ)
  271. sk->lingertime=MAX_SCHEDULE_TIMEOUT;
  272. else
  273. #endif
  274. sk->lingertime=ling.l_linger*HZ;
  275. sk->linger=1;
  276. }
  277. break;
  278. case SO_BSDCOMPAT:
  279. sk->bsdism = valbool;
  280. break;
  281. case SO_PASSCRED:
  282. sock->passcred = valbool;
  283. break;
  284. case SO_TIMESTAMP:
  285. sk->rcvtstamp = valbool;
  286. break;
  287. case SO_RCVLOWAT:
  288. if (val < 0)
  289. val = INT_MAX;
  290. sk->rcvlowat = val ? : 1;
  291. break;
  292. case SO_RCVTIMEO:
  293. ret = sock_set_timeout(&sk->rcvtimeo, optval, optlen);
  294. break;
  295. case SO_SNDTIMEO:
  296. ret = sock_set_timeout(&sk->sndtimeo, optval, optlen);
  297. break;
  298. #ifdef CONFIG_NETDEVICES
  299. case SO_BINDTODEVICE:
  300. {
  301. char devname[IFNAMSIZ]; 
  302. /* Sorry... */ 
  303. if (!capable(CAP_NET_RAW)) {
  304. ret = -EPERM;
  305. break;
  306. }
  307. /* Bind this socket to a particular device like "eth0",
  308.  * as specified in the passed interface name. If the
  309.  * name is "" or the option length is zero the socket 
  310.  * is not bound. 
  311.  */ 
  312. if (!valbool) {
  313. sk->bound_dev_if = 0;
  314. } else {
  315. if (optlen > IFNAMSIZ) 
  316. optlen = IFNAMSIZ; 
  317. if (copy_from_user(devname, optval, optlen)) {
  318. ret = -EFAULT;
  319. break;
  320. }
  321. /* Remove any cached route for this socket. */
  322. sk_dst_reset(sk);
  323. if (devname[0] == '') {
  324. sk->bound_dev_if = 0;
  325. } else {
  326. struct net_device *dev = dev_get_by_name(devname);
  327. if (!dev) {
  328. ret = -ENODEV;
  329. break;
  330. }
  331. sk->bound_dev_if = dev->ifindex;
  332. dev_put(dev);
  333. }
  334. }
  335. break;
  336. }
  337. #endif
  338. #ifdef CONFIG_FILTER
  339. case SO_ATTACH_FILTER:
  340. ret = -EINVAL;
  341. if (optlen == sizeof(struct sock_fprog)) {
  342. struct sock_fprog fprog;
  343. ret = -EFAULT;
  344. if (copy_from_user(&fprog, optval, sizeof(fprog)))
  345. break;
  346. ret = sk_attach_filter(&fprog, sk);
  347. }
  348. break;
  349. case SO_DETACH_FILTER:
  350. spin_lock_bh(&sk->lock.slock);
  351. filter = sk->filter;
  352.                         if (filter) {
  353. sk->filter = NULL;
  354. spin_unlock_bh(&sk->lock.slock);
  355. sk_filter_release(sk, filter);
  356. break;
  357. }
  358. spin_unlock_bh(&sk->lock.slock);
  359. ret = -ENONET;
  360. break;
  361. #endif
  362. /* We implement the SO_SNDLOWAT etc to
  363.    not be settable (1003.1g 5.3) */
  364. default:
  365.    ret = -ENOPROTOOPT;
  366. break;
  367.    }
  368. release_sock(sk);
  369. return ret;
  370. }
  371. int sock_getsockopt(struct socket *sock, int level, int optname,
  372.     char *optval, int *optlen)
  373. {
  374. struct sock *sk = sock->sk;
  375. union
  376. {
  377.    int val;
  378.    struct linger ling;
  379. struct timeval tm;
  380. } v;
  381. unsigned int lv=sizeof(int),len;
  382.   
  383.    if(get_user(len,optlen))
  384.    return -EFAULT;
  385. if(len < 0)
  386. return -EINVAL;
  387.    switch(optname) 
  388.    {
  389. case SO_DEBUG:
  390. v.val = sk->debug;
  391. break;
  392. case SO_DONTROUTE:
  393. v.val = sk->localroute;
  394. break;
  395. case SO_BROADCAST:
  396. v.val= sk->broadcast;
  397. break;
  398. case SO_SNDBUF:
  399. v.val=sk->sndbuf;
  400. break;
  401. case SO_RCVBUF:
  402. v.val =sk->rcvbuf;
  403. break;
  404. case SO_REUSEADDR:
  405. v.val = sk->reuse;
  406. break;
  407. case SO_KEEPALIVE:
  408. v.val = sk->keepopen;
  409. break;
  410. case SO_TYPE:
  411. v.val = sk->type;   
  412. break;
  413. case SO_ERROR:
  414. v.val = -sock_error(sk);
  415. if(v.val==0)
  416. v.val=xchg(&sk->err_soft,0);
  417. break;
  418. case SO_OOBINLINE:
  419. v.val = sk->urginline;
  420. break;
  421. case SO_NO_CHECK:
  422. v.val = sk->no_check;
  423. break;
  424. case SO_PRIORITY:
  425. v.val = sk->priority;
  426. break;
  427. case SO_LINGER:
  428. lv=sizeof(v.ling);
  429. v.ling.l_onoff=sk->linger;
  430.   v.ling.l_linger=sk->lingertime/HZ;
  431. break;
  432. case SO_BSDCOMPAT:
  433. v.val = sk->bsdism;
  434. break;
  435. case SO_TIMESTAMP:
  436. v.val = sk->rcvtstamp;
  437. break;
  438. case SO_RCVTIMEO:
  439. lv=sizeof(struct timeval);
  440. if (sk->rcvtimeo == MAX_SCHEDULE_TIMEOUT) {
  441. v.tm.tv_sec = 0;
  442. v.tm.tv_usec = 0;
  443. } else {
  444. v.tm.tv_sec = sk->rcvtimeo/HZ;
  445. v.tm.tv_usec = ((sk->rcvtimeo%HZ)*1000)/HZ;
  446. }
  447. break;
  448. case SO_SNDTIMEO:
  449. lv=sizeof(struct timeval);
  450. if (sk->sndtimeo == MAX_SCHEDULE_TIMEOUT) {
  451. v.tm.tv_sec = 0;
  452. v.tm.tv_usec = 0;
  453. } else {
  454. v.tm.tv_sec = sk->sndtimeo/HZ;
  455. v.tm.tv_usec = ((sk->sndtimeo%HZ)*1000)/HZ;
  456. }
  457. break;
  458. case SO_RCVLOWAT:
  459. v.val = sk->rcvlowat;
  460. break;
  461. case SO_SNDLOWAT:
  462. v.val=1;
  463. break; 
  464. case SO_PASSCRED:
  465. v.val = sock->passcred;
  466. break;
  467. case SO_PEERCRED:
  468. if (len > sizeof(sk->peercred))
  469. len = sizeof(sk->peercred);
  470. if (copy_to_user(optval, &sk->peercred, len))
  471. return -EFAULT;
  472. goto lenout;
  473. case SO_PEERNAME:
  474. {
  475. char address[128];
  476. if (sock->ops->getname(sock, (struct sockaddr *)address, &lv, 2))
  477. return -ENOTCONN;
  478. if (lv < len)
  479. return -EINVAL;
  480. if(copy_to_user((void*)optval, address, len))
  481. return -EFAULT;
  482. goto lenout;
  483. }
  484. /* Dubious BSD thing... Probably nobody even uses it, but
  485.  * the UNIX standard wants it for whatever reason... -DaveM
  486.  */
  487. case SO_ACCEPTCONN:
  488. v.val = (sk->state == TCP_LISTEN);
  489. break;
  490. default:
  491. return(-ENOPROTOOPT);
  492. }
  493. if (len > lv)
  494. len = lv;
  495. if (copy_to_user(optval, &v, len))
  496. return -EFAULT;
  497. lenout:
  498.    if (put_user(len, optlen))
  499.    return -EFAULT;
  500.    return 0;
  501. }
  502. static kmem_cache_t *sk_cachep;
  503. /*
  504.  * All socket objects are allocated here. This is for future
  505.  * usage.
  506.  */
  507.  
  508. struct sock *sk_alloc(int family, int priority, int zero_it)
  509. {
  510. struct sock *sk = kmem_cache_alloc(sk_cachep, priority);
  511. if(sk && zero_it) {
  512. memset(sk, 0, sizeof(struct sock));
  513. sk->family = family;
  514. sock_lock_init(sk);
  515. }
  516. return sk;
  517. }
  518. void sk_free(struct sock *sk)
  519. {
  520. #ifdef CONFIG_FILTER
  521. struct sk_filter *filter;
  522. #endif
  523. if (sk->destruct)
  524. sk->destruct(sk);
  525. #ifdef CONFIG_FILTER
  526. filter = sk->filter;
  527. if (filter) {
  528. sk_filter_release(sk, filter);
  529. sk->filter = NULL;
  530. }
  531. #endif
  532. if (atomic_read(&sk->omem_alloc))
  533. printk(KERN_DEBUG "sk_free: optmem leakage (%d bytes) detected.n", atomic_read(&sk->omem_alloc));
  534. kmem_cache_free(sk_cachep, sk);
  535. }
  536. void __init sk_init(void)
  537. {
  538. sk_cachep = kmem_cache_create("sock", sizeof(struct sock), 0,
  539.       SLAB_HWCACHE_ALIGN, 0, 0);
  540. if (!sk_cachep)
  541. printk(KERN_CRIT "sk_init: Cannot create sock SLAB cache!");
  542. if (num_physpages <= 4096) {
  543. sysctl_wmem_max = 32767;
  544. sysctl_rmem_max = 32767;
  545. sysctl_wmem_default = 32767;
  546. sysctl_rmem_default = 32767;
  547. } else if (num_physpages >= 131072) {
  548. sysctl_wmem_max = 131071;
  549. sysctl_rmem_max = 131071;
  550. }
  551. }
  552. /*
  553.  * Simple resource managers for sockets.
  554.  */
  555. /* 
  556.  * Write buffer destructor automatically called from kfree_skb. 
  557.  */
  558. void sock_wfree(struct sk_buff *skb)
  559. {
  560. struct sock *sk = skb->sk;
  561. /* In case it might be waiting for more memory. */
  562. atomic_sub(skb->truesize, &sk->wmem_alloc);
  563. if (!sk->use_write_queue)
  564. sk->write_space(sk);
  565. sock_put(sk);
  566. }
  567. /* 
  568.  * Read buffer destructor automatically called from kfree_skb. 
  569.  */
  570. void sock_rfree(struct sk_buff *skb)
  571. {
  572. struct sock *sk = skb->sk;
  573. atomic_sub(skb->truesize, &sk->rmem_alloc);
  574. }
  575. /*
  576.  * Allocate a skb from the socket's send buffer.
  577.  */
  578. struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force, int priority)
  579. {
  580. if (force || atomic_read(&sk->wmem_alloc) < sk->sndbuf) {
  581. struct sk_buff * skb = alloc_skb(size, priority);
  582. if (skb) {
  583. skb_set_owner_w(skb, sk);
  584. return skb;
  585. }
  586. }
  587. return NULL;
  588. }
  589. /*
  590.  * Allocate a skb from the socket's receive buffer.
  591.  */ 
  592. struct sk_buff *sock_rmalloc(struct sock *sk, unsigned long size, int force, int priority)
  593. {
  594. if (force || atomic_read(&sk->rmem_alloc) < sk->rcvbuf) {
  595. struct sk_buff *skb = alloc_skb(size, priority);
  596. if (skb) {
  597. skb_set_owner_r(skb, sk);
  598. return skb;
  599. }
  600. }
  601. return NULL;
  602. }
  603. /* 
  604.  * Allocate a memory block from the socket's option memory buffer.
  605.  */ 
  606. void *sock_kmalloc(struct sock *sk, int size, int priority)
  607. {
  608. if ((unsigned)size <= sysctl_optmem_max &&
  609.     atomic_read(&sk->omem_alloc)+size < sysctl_optmem_max) {
  610. void *mem;
  611. /* First do the add, to avoid the race if kmalloc
  612.    * might sleep.
  613.  */
  614. atomic_add(size, &sk->omem_alloc);
  615. mem = kmalloc(size, priority);
  616. if (mem)
  617. return mem;
  618. atomic_sub(size, &sk->omem_alloc);
  619. }
  620. return NULL;
  621. }
  622. /*
  623.  * Free an option memory block.
  624.  */
  625. void sock_kfree_s(struct sock *sk, void *mem, int size)
  626. {
  627. kfree(mem);
  628. atomic_sub(size, &sk->omem_alloc);
  629. }
  630. /* It is almost wait_for_tcp_memory minus release_sock/lock_sock.
  631.    I think, these locks should be removed for datagram sockets.
  632.  */
  633. static long sock_wait_for_wmem(struct sock * sk, long timeo)
  634. {
  635. DECLARE_WAITQUEUE(wait, current);
  636. clear_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
  637. add_wait_queue(sk->sleep, &wait);
  638. for (;;) {
  639. if (!timeo)
  640. break;
  641. if (signal_pending(current))
  642. break;
  643. set_bit(SOCK_NOSPACE, &sk->socket->flags);
  644. set_current_state(TASK_INTERRUPTIBLE);
  645. if (atomic_read(&sk->wmem_alloc) < sk->sndbuf)
  646. break;
  647. if (sk->shutdown & SEND_SHUTDOWN)
  648. break;
  649. if (sk->err)
  650. break;
  651. timeo = schedule_timeout(timeo);
  652. }
  653. __set_current_state(TASK_RUNNING);
  654. remove_wait_queue(sk->sleep, &wait);
  655. return timeo;
  656. }
  657. /*
  658.  * Generic send/receive buffer handlers
  659.  */
  660. struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
  661.      unsigned long data_len, int noblock, int *errcode)
  662. {
  663. struct sk_buff *skb;
  664. long timeo;
  665. int err;
  666. timeo = sock_sndtimeo(sk, noblock);
  667. while (1) {
  668. err = sock_error(sk);
  669. if (err != 0)
  670. goto failure;
  671. err = -EPIPE;
  672. if (sk->shutdown & SEND_SHUTDOWN)
  673. goto failure;
  674. if (atomic_read(&sk->wmem_alloc) < sk->sndbuf) {
  675. skb = alloc_skb(header_len, sk->allocation);
  676. if (skb) {
  677. int npages;
  678. int i;
  679. /* No pages, we're done... */
  680. if (!data_len)
  681. break;
  682. npages = (data_len + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
  683. skb->truesize += data_len;
  684. skb_shinfo(skb)->nr_frags = npages;
  685. for (i = 0; i < npages; i++) {
  686. struct page *page;
  687. skb_frag_t *frag;
  688. page = alloc_pages(sk->allocation, 0);
  689. if (!page) {
  690. err = -ENOBUFS;
  691. kfree_skb(skb);
  692. goto failure;
  693. }
  694. frag = &skb_shinfo(skb)->frags[i];
  695. frag->page = page;
  696. frag->page_offset = 0;
  697. frag->size = (data_len >= PAGE_SIZE ?
  698.       PAGE_SIZE :
  699.       data_len);
  700. data_len -= PAGE_SIZE;
  701. }
  702. /* Full success... */
  703. break;
  704. }
  705. err = -ENOBUFS;
  706. goto failure;
  707. }
  708. set_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
  709. set_bit(SOCK_NOSPACE, &sk->socket->flags);
  710. err = -EAGAIN;
  711. if (!timeo)
  712. goto failure;
  713. if (signal_pending(current))
  714. goto interrupted;
  715. timeo = sock_wait_for_wmem(sk, timeo);
  716. }
  717. skb_set_owner_w(skb, sk);
  718. return skb;
  719. interrupted:
  720. err = sock_intr_errno(timeo);
  721. failure:
  722. *errcode = err;
  723. return NULL;
  724. }
  725. struct sk_buff *sock_alloc_send_skb(struct sock *sk, unsigned long size, 
  726.     int noblock, int *errcode)
  727. {
  728. return sock_alloc_send_pskb(sk, size, 0, noblock, errcode);
  729. }
  730. void __lock_sock(struct sock *sk)
  731. {
  732. DECLARE_WAITQUEUE(wait, current);
  733. add_wait_queue_exclusive(&sk->lock.wq, &wait);
  734. for(;;) {
  735. current->state = TASK_UNINTERRUPTIBLE;
  736. spin_unlock_bh(&sk->lock.slock);
  737. schedule();
  738. spin_lock_bh(&sk->lock.slock);
  739. if(!sk->lock.users)
  740. break;
  741. }
  742. current->state = TASK_RUNNING;
  743. remove_wait_queue(&sk->lock.wq, &wait);
  744. }
  745. void __release_sock(struct sock *sk)
  746. {
  747. struct sk_buff *skb = sk->backlog.head;
  748. do {
  749. sk->backlog.head = sk->backlog.tail = NULL;
  750. bh_unlock_sock(sk);
  751. do {
  752. struct sk_buff *next = skb->next;
  753. skb->next = NULL;
  754. sk->backlog_rcv(sk, skb);
  755. skb = next;
  756. } while (skb != NULL);
  757. bh_lock_sock(sk);
  758. } while((skb = sk->backlog.head) != NULL);
  759. }
  760. /*
  761.  * Generic socket manager library. Most simpler socket families
  762.  * use this to manage their socket lists. At some point we should
  763.  * hash these. By making this generic we get the lot hashed for free.
  764.  *
  765.  * It is broken by design. All the protocols using it must be fixed. --ANK
  766.  */
  767. rwlock_t net_big_sklist_lock = RW_LOCK_UNLOCKED;
  768.  
  769. void sklist_remove_socket(struct sock **list, struct sock *sk)
  770. {
  771. struct sock *s;
  772. write_lock_bh(&net_big_sklist_lock);
  773. while ((s = *list) != NULL) {
  774. if (s == sk) {
  775. *list = s->next;
  776. break;
  777. }
  778. list = &s->next;
  779. }
  780. write_unlock_bh(&net_big_sklist_lock);
  781. if (s)
  782. sock_put(s);
  783. }
  784. void sklist_insert_socket(struct sock **list, struct sock *sk)
  785. {
  786. write_lock_bh(&net_big_sklist_lock);
  787. sk->next= *list;
  788. *list=sk;
  789. sock_hold(sk);
  790. write_unlock_bh(&net_big_sklist_lock);
  791. }
  792. /*
  793.  * This is only called from user mode. Thus it protects itself against
  794.  * interrupt users but doesn't worry about being called during work.
  795.  * Once it is removed from the queue no interrupt or bottom half will
  796.  * touch it and we are (fairly 8-) ) safe.
  797.  */
  798. void sklist_destroy_socket(struct sock **list, struct sock *sk);
  799. /*
  800.  * Handler for deferred kills.
  801.  */
  802. static void sklist_destroy_timer(unsigned long data)
  803. {
  804. struct sock *sk=(struct sock *)data;
  805. sklist_destroy_socket(NULL,sk);
  806. }
  807. /*
  808.  * Destroy a socket. We pass NULL for a list if we know the
  809.  * socket is not on a list.
  810.  */
  811.  
  812. void sklist_destroy_socket(struct sock **list,struct sock *sk)
  813. {
  814. if(list)
  815. sklist_remove_socket(list, sk);
  816. skb_queue_purge(&sk->receive_queue);
  817. if(atomic_read(&sk->wmem_alloc) == 0 &&
  818.    atomic_read(&sk->rmem_alloc) == 0 &&
  819.    sk->dead)
  820. {
  821. sock_put(sk);
  822. }
  823. else
  824. {
  825. /*
  826.  * Someone is using our buffers still.. defer
  827.  */
  828. init_timer(&sk->timer);
  829. sk->timer.expires=jiffies+SOCK_DESTROY_TIME;
  830. sk->timer.function=sklist_destroy_timer;
  831. sk->timer.data = (unsigned long)sk;
  832. add_timer(&sk->timer);
  833. }
  834. }
  835. /*
  836.  * Set of default routines for initialising struct proto_ops when
  837.  * the protocol does not support a particular function. In certain
  838.  * cases where it makes no sense for a protocol to have a "do nothing"
  839.  * function, some default processing is provided.
  840.  */
  841. int sock_no_release(struct socket *sock)
  842. {
  843. return 0;
  844. }
  845. int sock_no_bind(struct socket *sock, struct sockaddr *saddr, int len)
  846. {
  847. return -EOPNOTSUPP;
  848. }
  849. int sock_no_connect(struct socket *sock, struct sockaddr *saddr, 
  850.     int len, int flags)
  851. {
  852. return -EOPNOTSUPP;
  853. }
  854. int sock_no_socketpair(struct socket *sock1, struct socket *sock2)
  855. {
  856. return -EOPNOTSUPP;
  857. }
  858. int sock_no_accept(struct socket *sock, struct socket *newsock, int flags)
  859. {
  860. return -EOPNOTSUPP;
  861. }
  862. int sock_no_getname(struct socket *sock, struct sockaddr *saddr, 
  863.     int *len, int peer)
  864. {
  865. return -EOPNOTSUPP;
  866. }
  867. unsigned int sock_no_poll(struct file * file, struct socket *sock, poll_table *pt)
  868. {
  869. return 0;
  870. }
  871. int sock_no_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
  872. {
  873. return -EOPNOTSUPP;
  874. }
  875. int sock_no_listen(struct socket *sock, int backlog)
  876. {
  877. return -EOPNOTSUPP;
  878. }
  879. int sock_no_shutdown(struct socket *sock, int how)
  880. {
  881. return -EOPNOTSUPP;
  882. }
  883. int sock_no_setsockopt(struct socket *sock, int level, int optname,
  884.     char *optval, int optlen)
  885. {
  886. return -EOPNOTSUPP;
  887. }
  888. int sock_no_getsockopt(struct socket *sock, int level, int optname,
  889.     char *optval, int *optlen)
  890. {
  891. return -EOPNOTSUPP;
  892. }
  893. /* 
  894.  * Note: if you add something that sleeps here then change sock_fcntl()
  895.  *       to do proper fd locking.
  896.  */
  897. int sock_no_fcntl(struct socket *sock, unsigned int cmd, unsigned long arg)
  898. {
  899. struct sock *sk = sock->sk;
  900. switch(cmd)
  901. {
  902. case F_SETOWN:
  903. /*
  904.  * This is a little restrictive, but it's the only
  905.  * way to make sure that you can't send a sigurg to
  906.  * another process.
  907.  */
  908. if (current->pgrp != -arg &&
  909. current->pid != arg &&
  910. !capable(CAP_KILL)) return(-EPERM);
  911. sk->proc = arg;
  912. return(0);
  913. case F_GETOWN:
  914. return(sk->proc);
  915. default:
  916. return(-EINVAL);
  917. }
  918. }
  919. int sock_no_sendmsg(struct socket *sock, struct msghdr *m, int flags,
  920.     struct scm_cookie *scm)
  921. {
  922. return -EOPNOTSUPP;
  923. }
  924. int sock_no_recvmsg(struct socket *sock, struct msghdr *m, int len, int flags,
  925.     struct scm_cookie *scm)
  926. {
  927. return -EOPNOTSUPP;
  928. }
  929. int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma)
  930. {
  931. /* Mirror missing mmap method error code */
  932. return -ENODEV;
  933. }
  934. ssize_t sock_no_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags)
  935. {
  936. ssize_t res;
  937. struct msghdr msg;
  938. struct iovec iov;
  939. mm_segment_t old_fs;
  940. char *kaddr;
  941. kaddr = kmap(page);
  942. msg.msg_name = NULL;
  943. msg.msg_namelen = 0;
  944. msg.msg_iov = &iov;
  945. msg.msg_iovlen = 1;
  946. msg.msg_control = NULL;
  947. msg.msg_controllen = 0;
  948. msg.msg_flags = flags;
  949. iov.iov_base = kaddr + offset;
  950. iov.iov_len = size;
  951. old_fs = get_fs();
  952. set_fs(KERNEL_DS);
  953. res = sock_sendmsg(sock, &msg, size);
  954. set_fs(old_fs);
  955. kunmap(page);
  956. return res;
  957. }
  958. /*
  959.  * Default Socket Callbacks
  960.  */
  961. void sock_def_wakeup(struct sock *sk)
  962. {
  963. read_lock(&sk->callback_lock);
  964. if (sk->sleep && waitqueue_active(sk->sleep))
  965. wake_up_interruptible_all(sk->sleep);
  966. read_unlock(&sk->callback_lock);
  967. }
  968. void sock_def_error_report(struct sock *sk)
  969. {
  970. read_lock(&sk->callback_lock);
  971. if (sk->sleep && waitqueue_active(sk->sleep))
  972. wake_up_interruptible(sk->sleep);
  973. sk_wake_async(sk,0,POLL_ERR); 
  974. read_unlock(&sk->callback_lock);
  975. }
  976. void sock_def_readable(struct sock *sk, int len)
  977. {
  978. read_lock(&sk->callback_lock);
  979. if (sk->sleep && waitqueue_active(sk->sleep))
  980. wake_up_interruptible(sk->sleep);
  981. sk_wake_async(sk,1,POLL_IN);
  982. read_unlock(&sk->callback_lock);
  983. }
  984. void sock_def_write_space(struct sock *sk)
  985. {
  986. read_lock(&sk->callback_lock);
  987. /* Do not wake up a writer until he can make "significant"
  988.  * progress.  --DaveM
  989.  */
  990. if((atomic_read(&sk->wmem_alloc) << 1) <= sk->sndbuf) {
  991. if (sk->sleep && waitqueue_active(sk->sleep))
  992. wake_up_interruptible(sk->sleep);
  993. /* Should agree with poll, otherwise some programs break */
  994. if (sock_writeable(sk))
  995. sk_wake_async(sk, 2, POLL_OUT);
  996. }
  997. read_unlock(&sk->callback_lock);
  998. }
  999. void sock_def_destruct(struct sock *sk)
  1000. {
  1001. if (sk->protinfo.destruct_hook)
  1002. kfree(sk->protinfo.destruct_hook);
  1003. }
  1004. void sock_init_data(struct socket *sock, struct sock *sk)
  1005. {
  1006. skb_queue_head_init(&sk->receive_queue);
  1007. skb_queue_head_init(&sk->write_queue);
  1008. skb_queue_head_init(&sk->error_queue);
  1009. init_timer(&sk->timer);
  1010. sk->allocation = GFP_KERNEL;
  1011. sk->rcvbuf = sysctl_rmem_default;
  1012. sk->sndbuf = sysctl_wmem_default;
  1013. sk->state  =  TCP_CLOSE;
  1014. sk->zapped = 1;
  1015. sk->socket = sock;
  1016. if(sock)
  1017. {
  1018. sk->type = sock->type;
  1019. sk->sleep = &sock->wait;
  1020. sock->sk = sk;
  1021. } else
  1022. sk->sleep = NULL;
  1023. sk->dst_lock = RW_LOCK_UNLOCKED;
  1024. sk->callback_lock = RW_LOCK_UNLOCKED;
  1025. sk->state_change = sock_def_wakeup;
  1026. sk->data_ready = sock_def_readable;
  1027. sk->write_space = sock_def_write_space;
  1028. sk->error_report = sock_def_error_report;
  1029. sk->destruct            =       sock_def_destruct;
  1030. sk->peercred.pid  = 0;
  1031. sk->peercred.uid = -1;
  1032. sk->peercred.gid = -1;
  1033. sk->rcvlowat = 1;
  1034. sk->rcvtimeo = MAX_SCHEDULE_TIMEOUT;
  1035. sk->sndtimeo = MAX_SCHEDULE_TIMEOUT;
  1036. atomic_set(&sk->refcnt, 1);
  1037. }