Merge git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/sysctl
[cascardo/linux.git] / net / core / datagram.c
1 /*
2  *      SUCS NET3:
3  *
4  *      Generic datagram handling routines. These are generic for all
5  *      protocols. Possibly a generic IP version on top of these would
6  *      make sense. Not tonight however 8-).
7  *      This is used because UDP, RAW, PACKET, DDP, IPX, AX.25 and
8  *      NetROM layer all have identical poll code and mostly
9  *      identical recvmsg() code. So we share it here. The poll was
10  *      shared before but buried in udp.c so I moved it.
11  *
12  *      Authors:        Alan Cox <alan@lxorguk.ukuu.org.uk>. (datagram_poll() from old
13  *                                                   udp.c code)
14  *
15  *      Fixes:
16  *              Alan Cox        :       NULL return from skb_peek_copy()
17  *                                      understood
18  *              Alan Cox        :       Rewrote skb_read_datagram to avoid the
19  *                                      skb_peek_copy stuff.
20  *              Alan Cox        :       Added support for SOCK_SEQPACKET.
21  *                                      IPX can no longer use the SO_TYPE hack
22  *                                      but AX.25 now works right, and SPX is
23  *                                      feasible.
24  *              Alan Cox        :       Fixed write poll of non IP protocol
25  *                                      crash.
26  *              Florian  La Roche:      Changed for my new skbuff handling.
27  *              Darryl Miles    :       Fixed non-blocking SOCK_SEQPACKET.
28  *              Linus Torvalds  :       BSD semantic fixes.
29  *              Alan Cox        :       Datagram iovec handling
30  *              Darryl Miles    :       Fixed non-blocking SOCK_STREAM.
31  *              Alan Cox        :       POSIXisms
32  *              Pete Wyckoff    :       Unconnected accept() fix.
33  *
34  */
35
36 #include <linux/module.h>
37 #include <linux/types.h>
38 #include <linux/kernel.h>
39 #include <asm/uaccess.h>
40 #include <asm/system.h>
41 #include <linux/mm.h>
42 #include <linux/interrupt.h>
43 #include <linux/errno.h>
44 #include <linux/sched.h>
45 #include <linux/inet.h>
46 #include <linux/netdevice.h>
47 #include <linux/rtnetlink.h>
48 #include <linux/poll.h>
49 #include <linux/highmem.h>
50 #include <linux/spinlock.h>
51 #include <linux/slab.h>
52
53 #include <net/protocol.h>
54 #include <linux/skbuff.h>
55
56 #include <net/checksum.h>
57 #include <net/sock.h>
58 #include <net/tcp_states.h>
59 #include <trace/events/skb.h>
60
61 /*
62  *      Is a socket 'connection oriented' ?
63  */
64 static inline int connection_based(struct sock *sk)
65 {
66         return sk->sk_type == SOCK_SEQPACKET || sk->sk_type == SOCK_STREAM;
67 }
68
69 static int receiver_wake_function(wait_queue_t *wait, unsigned mode, int sync,
70                                   void *key)
71 {
72         unsigned long bits = (unsigned long)key;
73
74         /*
75          * Avoid a wakeup if event not interesting for us
76          */
77         if (bits && !(bits & (POLLIN | POLLERR)))
78                 return 0;
79         return autoremove_wake_function(wait, mode, sync, key);
80 }
81 /*
82  * Wait for a packet..
83  */
84 static int wait_for_packet(struct sock *sk, int *err, long *timeo_p)
85 {
86         int error;
87         DEFINE_WAIT_FUNC(wait, receiver_wake_function);
88
89         prepare_to_wait_exclusive(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
90
91         /* Socket errors? */
92         error = sock_error(sk);
93         if (error)
94                 goto out_err;
95
96         if (!skb_queue_empty(&sk->sk_receive_queue))
97                 goto out;
98
99         /* Socket shut down? */
100         if (sk->sk_shutdown & RCV_SHUTDOWN)
101                 goto out_noerr;
102
103         /* Sequenced packets can come disconnected.
104          * If so we report the problem
105          */
106         error = -ENOTCONN;
107         if (connection_based(sk) &&
108             !(sk->sk_state == TCP_ESTABLISHED || sk->sk_state == TCP_LISTEN))
109                 goto out_err;
110
111         /* handle signals */
112         if (signal_pending(current))
113                 goto interrupted;
114
115         error = 0;
116         *timeo_p = schedule_timeout(*timeo_p);
117 out:
118         finish_wait(sk_sleep(sk), &wait);
119         return error;
120 interrupted:
121         error = sock_intr_errno(*timeo_p);
122 out_err:
123         *err = error;
124         goto out;
125 out_noerr:
126         *err = 0;
127         error = 1;
128         goto out;
129 }
130
131 /**
132  *      __skb_recv_datagram - Receive a datagram skbuff
133  *      @sk: socket
134  *      @flags: MSG_ flags
135  *      @off: an offset in bytes to peek skb from. Returns an offset
136  *            within an skb where data actually starts
137  *      @peeked: returns non-zero if this packet has been seen before
138  *      @err: error code returned
139  *
140  *      Get a datagram skbuff, understands the peeking, nonblocking wakeups
141  *      and possible races. This replaces identical code in packet, raw and
142  *      udp, as well as the IPX AX.25 and Appletalk. It also finally fixes
143  *      the long standing peek and read race for datagram sockets. If you
144  *      alter this routine remember it must be re-entrant.
145  *
146  *      This function will lock the socket if a skb is returned, so the caller
147  *      needs to unlock the socket in that case (usually by calling
148  *      skb_free_datagram)
149  *
150  *      * It does not lock socket since today. This function is
151  *      * free of race conditions. This measure should/can improve
152  *      * significantly datagram socket latencies at high loads,
153  *      * when data copying to user space takes lots of time.
154  *      * (BTW I've just killed the last cli() in IP/IPv6/core/netlink/packet
155  *      *  8) Great win.)
156  *      *                                           --ANK (980729)
157  *
158  *      The order of the tests when we find no data waiting are specified
159  *      quite explicitly by POSIX 1003.1g, don't change them without having
160  *      the standard around please.
161  */
162 struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags,
163                                     int *peeked, int *off, int *err)
164 {
165         struct sk_buff *skb;
166         long timeo;
167         /*
168          * Caller is allowed not to check sk->sk_err before skb_recv_datagram()
169          */
170         int error = sock_error(sk);
171
172         if (error)
173                 goto no_packet;
174
175         timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
176
177         do {
178                 /* Again only user level code calls this function, so nothing
179                  * interrupt level will suddenly eat the receive_queue.
180                  *
181                  * Look at current nfs client by the way...
182                  * However, this function was correct in any case. 8)
183                  */
184                 unsigned long cpu_flags;
185                 struct sk_buff_head *queue = &sk->sk_receive_queue;
186
187                 spin_lock_irqsave(&queue->lock, cpu_flags);
188                 skb_queue_walk(queue, skb) {
189                         *peeked = skb->peeked;
190                         if (flags & MSG_PEEK) {
191                                 if (*off >= skb->len) {
192                                         *off -= skb->len;
193                                         continue;
194                                 }
195                                 skb->peeked = 1;
196                                 atomic_inc(&skb->users);
197                         } else
198                                 __skb_unlink(skb, queue);
199
200                         spin_unlock_irqrestore(&queue->lock, cpu_flags);
201                         return skb;
202                 }
203                 spin_unlock_irqrestore(&queue->lock, cpu_flags);
204
205                 /* User doesn't want to wait */
206                 error = -EAGAIN;
207                 if (!timeo)
208                         goto no_packet;
209
210         } while (!wait_for_packet(sk, err, &timeo));
211
212         return NULL;
213
214 no_packet:
215         *err = error;
216         return NULL;
217 }
218 EXPORT_SYMBOL(__skb_recv_datagram);
219
220 struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags,
221                                   int noblock, int *err)
222 {
223         int peeked, off = 0;
224
225         return __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
226                                    &peeked, &off, err);
227 }
228 EXPORT_SYMBOL(skb_recv_datagram);
229
230 void skb_free_datagram(struct sock *sk, struct sk_buff *skb)
231 {
232         consume_skb(skb);
233         sk_mem_reclaim_partial(sk);
234 }
235 EXPORT_SYMBOL(skb_free_datagram);
236
237 void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb)
238 {
239         bool slow;
240
241         if (likely(atomic_read(&skb->users) == 1))
242                 smp_rmb();
243         else if (likely(!atomic_dec_and_test(&skb->users)))
244                 return;
245
246         slow = lock_sock_fast(sk);
247         skb_orphan(skb);
248         sk_mem_reclaim_partial(sk);
249         unlock_sock_fast(sk, slow);
250
251         /* skb is now orphaned, can be freed outside of locked section */
252         trace_kfree_skb(skb, skb_free_datagram_locked);
253         __kfree_skb(skb);
254 }
255 EXPORT_SYMBOL(skb_free_datagram_locked);
256
257 /**
258  *      skb_kill_datagram - Free a datagram skbuff forcibly
259  *      @sk: socket
260  *      @skb: datagram skbuff
261  *      @flags: MSG_ flags
262  *
263  *      This function frees a datagram skbuff that was received by
264  *      skb_recv_datagram.  The flags argument must match the one
265  *      used for skb_recv_datagram.
266  *
267  *      If the MSG_PEEK flag is set, and the packet is still on the
268  *      receive queue of the socket, it will be taken off the queue
269  *      before it is freed.
270  *
271  *      This function currently only disables BH when acquiring the
272  *      sk_receive_queue lock.  Therefore it must not be used in a
273  *      context where that lock is acquired in an IRQ context.
274  *
275  *      It returns 0 if the packet was removed by us.
276  */
277
278 int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags)
279 {
280         int err = 0;
281
282         if (flags & MSG_PEEK) {
283                 err = -ENOENT;
284                 spin_lock_bh(&sk->sk_receive_queue.lock);
285                 if (skb == skb_peek(&sk->sk_receive_queue)) {
286                         __skb_unlink(skb, &sk->sk_receive_queue);
287                         atomic_dec(&skb->users);
288                         err = 0;
289                 }
290                 spin_unlock_bh(&sk->sk_receive_queue.lock);
291         }
292
293         kfree_skb(skb);
294         atomic_inc(&sk->sk_drops);
295         sk_mem_reclaim_partial(sk);
296
297         return err;
298 }
299 EXPORT_SYMBOL(skb_kill_datagram);
300
301 /**
302  *      skb_copy_datagram_iovec - Copy a datagram to an iovec.
303  *      @skb: buffer to copy
304  *      @offset: offset in the buffer to start copying from
305  *      @to: io vector to copy to
306  *      @len: amount of data to copy from buffer to iovec
307  *
308  *      Note: the iovec is modified during the copy.
309  */
310 int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset,
311                             struct iovec *to, int len)
312 {
313         int start = skb_headlen(skb);
314         int i, copy = start - offset;
315         struct sk_buff *frag_iter;
316
317         trace_skb_copy_datagram_iovec(skb, len);
318
319         /* Copy header. */
320         if (copy > 0) {
321                 if (copy > len)
322                         copy = len;
323                 if (memcpy_toiovec(to, skb->data + offset, copy))
324                         goto fault;
325                 if ((len -= copy) == 0)
326                         return 0;
327                 offset += copy;
328         }
329
330         /* Copy paged appendix. Hmm... why does this look so complicated? */
331         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
332                 int end;
333                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
334
335                 WARN_ON(start > offset + len);
336
337                 end = start + skb_frag_size(frag);
338                 if ((copy = end - offset) > 0) {
339                         int err;
340                         u8  *vaddr;
341                         struct page *page = skb_frag_page(frag);
342
343                         if (copy > len)
344                                 copy = len;
345                         vaddr = kmap(page);
346                         err = memcpy_toiovec(to, vaddr + frag->page_offset +
347                                              offset - start, copy);
348                         kunmap(page);
349                         if (err)
350                                 goto fault;
351                         if (!(len -= copy))
352                                 return 0;
353                         offset += copy;
354                 }
355                 start = end;
356         }
357
358         skb_walk_frags(skb, frag_iter) {
359                 int end;
360
361                 WARN_ON(start > offset + len);
362
363                 end = start + frag_iter->len;
364                 if ((copy = end - offset) > 0) {
365                         if (copy > len)
366                                 copy = len;
367                         if (skb_copy_datagram_iovec(frag_iter,
368                                                     offset - start,
369                                                     to, copy))
370                                 goto fault;
371                         if ((len -= copy) == 0)
372                                 return 0;
373                         offset += copy;
374                 }
375                 start = end;
376         }
377         if (!len)
378                 return 0;
379
380 fault:
381         return -EFAULT;
382 }
383 EXPORT_SYMBOL(skb_copy_datagram_iovec);
384
385 /**
386  *      skb_copy_datagram_const_iovec - Copy a datagram to an iovec.
387  *      @skb: buffer to copy
388  *      @offset: offset in the buffer to start copying from
389  *      @to: io vector to copy to
390  *      @to_offset: offset in the io vector to start copying to
391  *      @len: amount of data to copy from buffer to iovec
392  *
393  *      Returns 0 or -EFAULT.
394  *      Note: the iovec is not modified during the copy.
395  */
396 int skb_copy_datagram_const_iovec(const struct sk_buff *skb, int offset,
397                                   const struct iovec *to, int to_offset,
398                                   int len)
399 {
400         int start = skb_headlen(skb);
401         int i, copy = start - offset;
402         struct sk_buff *frag_iter;
403
404         /* Copy header. */
405         if (copy > 0) {
406                 if (copy > len)
407                         copy = len;
408                 if (memcpy_toiovecend(to, skb->data + offset, to_offset, copy))
409                         goto fault;
410                 if ((len -= copy) == 0)
411                         return 0;
412                 offset += copy;
413                 to_offset += copy;
414         }
415
416         /* Copy paged appendix. Hmm... why does this look so complicated? */
417         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
418                 int end;
419                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
420
421                 WARN_ON(start > offset + len);
422
423                 end = start + skb_frag_size(frag);
424                 if ((copy = end - offset) > 0) {
425                         int err;
426                         u8  *vaddr;
427                         struct page *page = skb_frag_page(frag);
428
429                         if (copy > len)
430                                 copy = len;
431                         vaddr = kmap(page);
432                         err = memcpy_toiovecend(to, vaddr + frag->page_offset +
433                                                 offset - start, to_offset, copy);
434                         kunmap(page);
435                         if (err)
436                                 goto fault;
437                         if (!(len -= copy))
438                                 return 0;
439                         offset += copy;
440                         to_offset += copy;
441                 }
442                 start = end;
443         }
444
445         skb_walk_frags(skb, frag_iter) {
446                 int end;
447
448                 WARN_ON(start > offset + len);
449
450                 end = start + frag_iter->len;
451                 if ((copy = end - offset) > 0) {
452                         if (copy > len)
453                                 copy = len;
454                         if (skb_copy_datagram_const_iovec(frag_iter,
455                                                           offset - start,
456                                                           to, to_offset,
457                                                           copy))
458                                 goto fault;
459                         if ((len -= copy) == 0)
460                                 return 0;
461                         offset += copy;
462                         to_offset += copy;
463                 }
464                 start = end;
465         }
466         if (!len)
467                 return 0;
468
469 fault:
470         return -EFAULT;
471 }
472 EXPORT_SYMBOL(skb_copy_datagram_const_iovec);
473
474 /**
475  *      skb_copy_datagram_from_iovec - Copy a datagram from an iovec.
476  *      @skb: buffer to copy
477  *      @offset: offset in the buffer to start copying to
478  *      @from: io vector to copy to
479  *      @from_offset: offset in the io vector to start copying from
480  *      @len: amount of data to copy to buffer from iovec
481  *
482  *      Returns 0 or -EFAULT.
483  *      Note: the iovec is not modified during the copy.
484  */
485 int skb_copy_datagram_from_iovec(struct sk_buff *skb, int offset,
486                                  const struct iovec *from, int from_offset,
487                                  int len)
488 {
489         int start = skb_headlen(skb);
490         int i, copy = start - offset;
491         struct sk_buff *frag_iter;
492
493         /* Copy header. */
494         if (copy > 0) {
495                 if (copy > len)
496                         copy = len;
497                 if (memcpy_fromiovecend(skb->data + offset, from, from_offset,
498                                         copy))
499                         goto fault;
500                 if ((len -= copy) == 0)
501                         return 0;
502                 offset += copy;
503                 from_offset += copy;
504         }
505
506         /* Copy paged appendix. Hmm... why does this look so complicated? */
507         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
508                 int end;
509                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
510
511                 WARN_ON(start > offset + len);
512
513                 end = start + skb_frag_size(frag);
514                 if ((copy = end - offset) > 0) {
515                         int err;
516                         u8  *vaddr;
517                         struct page *page = skb_frag_page(frag);
518
519                         if (copy > len)
520                                 copy = len;
521                         vaddr = kmap(page);
522                         err = memcpy_fromiovecend(vaddr + frag->page_offset +
523                                                   offset - start,
524                                                   from, from_offset, copy);
525                         kunmap(page);
526                         if (err)
527                                 goto fault;
528
529                         if (!(len -= copy))
530                                 return 0;
531                         offset += copy;
532                         from_offset += copy;
533                 }
534                 start = end;
535         }
536
537         skb_walk_frags(skb, frag_iter) {
538                 int end;
539
540                 WARN_ON(start > offset + len);
541
542                 end = start + frag_iter->len;
543                 if ((copy = end - offset) > 0) {
544                         if (copy > len)
545                                 copy = len;
546                         if (skb_copy_datagram_from_iovec(frag_iter,
547                                                          offset - start,
548                                                          from,
549                                                          from_offset,
550                                                          copy))
551                                 goto fault;
552                         if ((len -= copy) == 0)
553                                 return 0;
554                         offset += copy;
555                         from_offset += copy;
556                 }
557                 start = end;
558         }
559         if (!len)
560                 return 0;
561
562 fault:
563         return -EFAULT;
564 }
565 EXPORT_SYMBOL(skb_copy_datagram_from_iovec);
566
567 static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
568                                       u8 __user *to, int len,
569                                       __wsum *csump)
570 {
571         int start = skb_headlen(skb);
572         int i, copy = start - offset;
573         struct sk_buff *frag_iter;
574         int pos = 0;
575
576         /* Copy header. */
577         if (copy > 0) {
578                 int err = 0;
579                 if (copy > len)
580                         copy = len;
581                 *csump = csum_and_copy_to_user(skb->data + offset, to, copy,
582                                                *csump, &err);
583                 if (err)
584                         goto fault;
585                 if ((len -= copy) == 0)
586                         return 0;
587                 offset += copy;
588                 to += copy;
589                 pos = copy;
590         }
591
592         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
593                 int end;
594                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
595
596                 WARN_ON(start > offset + len);
597
598                 end = start + skb_frag_size(frag);
599                 if ((copy = end - offset) > 0) {
600                         __wsum csum2;
601                         int err = 0;
602                         u8  *vaddr;
603                         struct page *page = skb_frag_page(frag);
604
605                         if (copy > len)
606                                 copy = len;
607                         vaddr = kmap(page);
608                         csum2 = csum_and_copy_to_user(vaddr +
609                                                         frag->page_offset +
610                                                         offset - start,
611                                                       to, copy, 0, &err);
612                         kunmap(page);
613                         if (err)
614                                 goto fault;
615                         *csump = csum_block_add(*csump, csum2, pos);
616                         if (!(len -= copy))
617                                 return 0;
618                         offset += copy;
619                         to += copy;
620                         pos += copy;
621                 }
622                 start = end;
623         }
624
625         skb_walk_frags(skb, frag_iter) {
626                 int end;
627
628                 WARN_ON(start > offset + len);
629
630                 end = start + frag_iter->len;
631                 if ((copy = end - offset) > 0) {
632                         __wsum csum2 = 0;
633                         if (copy > len)
634                                 copy = len;
635                         if (skb_copy_and_csum_datagram(frag_iter,
636                                                        offset - start,
637                                                        to, copy,
638                                                        &csum2))
639                                 goto fault;
640                         *csump = csum_block_add(*csump, csum2, pos);
641                         if ((len -= copy) == 0)
642                                 return 0;
643                         offset += copy;
644                         to += copy;
645                         pos += copy;
646                 }
647                 start = end;
648         }
649         if (!len)
650                 return 0;
651
652 fault:
653         return -EFAULT;
654 }
655
656 __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len)
657 {
658         __sum16 sum;
659
660         sum = csum_fold(skb_checksum(skb, 0, len, skb->csum));
661         if (likely(!sum)) {
662                 if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
663                         netdev_rx_csum_fault(skb->dev);
664                 skb->ip_summed = CHECKSUM_UNNECESSARY;
665         }
666         return sum;
667 }
668 EXPORT_SYMBOL(__skb_checksum_complete_head);
669
670 __sum16 __skb_checksum_complete(struct sk_buff *skb)
671 {
672         return __skb_checksum_complete_head(skb, skb->len);
673 }
674 EXPORT_SYMBOL(__skb_checksum_complete);
675
676 /**
677  *      skb_copy_and_csum_datagram_iovec - Copy and checkum skb to user iovec.
678  *      @skb: skbuff
679  *      @hlen: hardware length
680  *      @iov: io vector
681  *
682  *      Caller _must_ check that skb will fit to this iovec.
683  *
684  *      Returns: 0       - success.
685  *               -EINVAL - checksum failure.
686  *               -EFAULT - fault during copy. Beware, in this case iovec
687  *                         can be modified!
688  */
689 int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,
690                                      int hlen, struct iovec *iov)
691 {
692         __wsum csum;
693         int chunk = skb->len - hlen;
694
695         if (!chunk)
696                 return 0;
697
698         /* Skip filled elements.
699          * Pretty silly, look at memcpy_toiovec, though 8)
700          */
701         while (!iov->iov_len)
702                 iov++;
703
704         if (iov->iov_len < chunk) {
705                 if (__skb_checksum_complete(skb))
706                         goto csum_error;
707                 if (skb_copy_datagram_iovec(skb, hlen, iov, chunk))
708                         goto fault;
709         } else {
710                 csum = csum_partial(skb->data, hlen, skb->csum);
711                 if (skb_copy_and_csum_datagram(skb, hlen, iov->iov_base,
712                                                chunk, &csum))
713                         goto fault;
714                 if (csum_fold(csum))
715                         goto csum_error;
716                 if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
717                         netdev_rx_csum_fault(skb->dev);
718                 iov->iov_len -= chunk;
719                 iov->iov_base += chunk;
720         }
721         return 0;
722 csum_error:
723         return -EINVAL;
724 fault:
725         return -EFAULT;
726 }
727 EXPORT_SYMBOL(skb_copy_and_csum_datagram_iovec);
728
729 /**
730  *      datagram_poll - generic datagram poll
731  *      @file: file struct
732  *      @sock: socket
733  *      @wait: poll table
734  *
735  *      Datagram poll: Again totally generic. This also handles
736  *      sequenced packet sockets providing the socket receive queue
737  *      is only ever holding data ready to receive.
738  *
739  *      Note: when you _don't_ use this routine for this protocol,
740  *      and you use a different write policy from sock_writeable()
741  *      then please supply your own write_space callback.
742  */
743 unsigned int datagram_poll(struct file *file, struct socket *sock,
744                            poll_table *wait)
745 {
746         struct sock *sk = sock->sk;
747         unsigned int mask;
748
749         sock_poll_wait(file, sk_sleep(sk), wait);
750         mask = 0;
751
752         /* exceptional events? */
753         if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
754                 mask |= POLLERR;
755         if (sk->sk_shutdown & RCV_SHUTDOWN)
756                 mask |= POLLRDHUP | POLLIN | POLLRDNORM;
757         if (sk->sk_shutdown == SHUTDOWN_MASK)
758                 mask |= POLLHUP;
759
760         /* readable? */
761         if (!skb_queue_empty(&sk->sk_receive_queue))
762                 mask |= POLLIN | POLLRDNORM;
763
764         /* Connection-based need to check for termination and startup */
765         if (connection_based(sk)) {
766                 if (sk->sk_state == TCP_CLOSE)
767                         mask |= POLLHUP;
768                 /* connection hasn't started yet? */
769                 if (sk->sk_state == TCP_SYN_SENT)
770                         return mask;
771         }
772
773         /* writable? */
774         if (sock_writeable(sk))
775                 mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
776         else
777                 set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
778
779         return mask;
780 }
781 EXPORT_SYMBOL(datagram_poll);