linux/net/dccp/proto.c
<<
>>
Prefs
   1/*
   2 *  net/dccp/proto.c
   3 *
   4 *  An implementation of the DCCP protocol
   5 *  Arnaldo Carvalho de Melo <acme@conectiva.com.br>
   6 *
   7 *      This program is free software; you can redistribute it and/or modify it
   8 *      under the terms of the GNU General Public License version 2 as
   9 *      published by the Free Software Foundation.
  10 */
  11
  12#include <linux/dccp.h>
  13#include <linux/module.h>
  14#include <linux/types.h>
  15#include <linux/sched.h>
  16#include <linux/kernel.h>
  17#include <linux/skbuff.h>
  18#include <linux/netdevice.h>
  19#include <linux/in.h>
  20#include <linux/if_arp.h>
  21#include <linux/init.h>
  22#include <linux/random.h>
  23#include <linux/slab.h>
  24#include <net/checksum.h>
  25
  26#include <net/inet_sock.h>
  27#include <net/sock.h>
  28#include <net/xfrm.h>
  29
  30#include <asm/ioctls.h>
  31#include <linux/spinlock.h>
  32#include <linux/timer.h>
  33#include <linux/delay.h>
  34#include <linux/poll.h>
  35
  36#include "ccid.h"
  37#include "dccp.h"
  38#include "feat.h"
  39
  40DEFINE_SNMP_STAT(struct dccp_mib, dccp_statistics) __read_mostly;
  41
  42EXPORT_SYMBOL_GPL(dccp_statistics);
  43
  44struct percpu_counter dccp_orphan_count;
  45EXPORT_SYMBOL_GPL(dccp_orphan_count);
  46
  47struct inet_hashinfo dccp_hashinfo;
  48EXPORT_SYMBOL_GPL(dccp_hashinfo);
  49
  50/* the maximum queue length for tx in packets. 0 is no limit */
  51int sysctl_dccp_tx_qlen __read_mostly = 5;
  52
  53#ifdef CONFIG_IP_DCCP_DEBUG
  54static const char *dccp_state_name(const int state)
  55{
  56        static const char *const dccp_state_names[] = {
  57        [DCCP_OPEN]             = "OPEN",
  58        [DCCP_REQUESTING]       = "REQUESTING",
  59        [DCCP_PARTOPEN]         = "PARTOPEN",
  60        [DCCP_LISTEN]           = "LISTEN",
  61        [DCCP_RESPOND]          = "RESPOND",
  62        [DCCP_CLOSING]          = "CLOSING",
  63        [DCCP_ACTIVE_CLOSEREQ]  = "CLOSEREQ",
  64        [DCCP_PASSIVE_CLOSE]    = "PASSIVE_CLOSE",
  65        [DCCP_PASSIVE_CLOSEREQ] = "PASSIVE_CLOSEREQ",
  66        [DCCP_TIME_WAIT]        = "TIME_WAIT",
  67        [DCCP_CLOSED]           = "CLOSED",
  68        };
  69
  70        if (state >= DCCP_MAX_STATES)
  71                return "INVALID STATE!";
  72        else
  73                return dccp_state_names[state];
  74}
  75#endif
  76
  77void dccp_set_state(struct sock *sk, const int state)
  78{
  79        const int oldstate = sk->sk_state;
  80
  81        dccp_pr_debug("%s(%p)  %s  -->  %s\n", dccp_role(sk), sk,
  82                      dccp_state_name(oldstate), dccp_state_name(state));
  83        WARN_ON(state == oldstate);
  84
  85        switch (state) {
  86        case DCCP_OPEN:
  87                if (oldstate != DCCP_OPEN)
  88                        DCCP_INC_STATS(DCCP_MIB_CURRESTAB);
  89                /* Client retransmits all Confirm options until entering OPEN */
  90                if (oldstate == DCCP_PARTOPEN)
  91                        dccp_feat_list_purge(&dccp_sk(sk)->dccps_featneg);
  92                break;
  93
  94        case DCCP_CLOSED:
  95                if (oldstate == DCCP_OPEN || oldstate == DCCP_ACTIVE_CLOSEREQ ||
  96                    oldstate == DCCP_CLOSING)
  97                        DCCP_INC_STATS(DCCP_MIB_ESTABRESETS);
  98
  99                sk->sk_prot->unhash(sk);
 100                if (inet_csk(sk)->icsk_bind_hash != NULL &&
 101                    !(sk->sk_userlocks & SOCK_BINDPORT_LOCK))
 102                        inet_put_port(sk);
 103                /* fall through */
 104        default:
 105                if (oldstate == DCCP_OPEN)
 106                        DCCP_DEC_STATS(DCCP_MIB_CURRESTAB);
 107        }
 108
 109        /* Change state AFTER socket is unhashed to avoid closed
 110         * socket sitting in hash tables.
 111         */
 112        sk->sk_state = state;
 113}
 114
 115EXPORT_SYMBOL_GPL(dccp_set_state);
 116
 117static void dccp_finish_passive_close(struct sock *sk)
 118{
 119        switch (sk->sk_state) {
 120        case DCCP_PASSIVE_CLOSE:
 121                /* Node (client or server) has received Close packet. */
 122                dccp_send_reset(sk, DCCP_RESET_CODE_CLOSED);
 123                dccp_set_state(sk, DCCP_CLOSED);
 124                break;
 125        case DCCP_PASSIVE_CLOSEREQ:
 126                /*
 127                 * Client received CloseReq. We set the `active' flag so that
 128                 * dccp_send_close() retransmits the Close as per RFC 4340, 8.3.
 129                 */
 130                dccp_send_close(sk, 1);
 131                dccp_set_state(sk, DCCP_CLOSING);
 132        }
 133}
 134
 135void dccp_done(struct sock *sk)
 136{
 137        dccp_set_state(sk, DCCP_CLOSED);
 138        dccp_clear_xmit_timers(sk);
 139
 140        sk->sk_shutdown = SHUTDOWN_MASK;
 141
 142        if (!sock_flag(sk, SOCK_DEAD))
 143                sk->sk_state_change(sk);
 144        else
 145                inet_csk_destroy_sock(sk);
 146}
 147
 148EXPORT_SYMBOL_GPL(dccp_done);
 149
 150const char *dccp_packet_name(const int type)
 151{
 152        static const char *const dccp_packet_names[] = {
 153                [DCCP_PKT_REQUEST]  = "REQUEST",
 154                [DCCP_PKT_RESPONSE] = "RESPONSE",
 155                [DCCP_PKT_DATA]     = "DATA",
 156                [DCCP_PKT_ACK]      = "ACK",
 157                [DCCP_PKT_DATAACK]  = "DATAACK",
 158                [DCCP_PKT_CLOSEREQ] = "CLOSEREQ",
 159                [DCCP_PKT_CLOSE]    = "CLOSE",
 160                [DCCP_PKT_RESET]    = "RESET",
 161                [DCCP_PKT_SYNC]     = "SYNC",
 162                [DCCP_PKT_SYNCACK]  = "SYNCACK",
 163        };
 164
 165        if (type >= DCCP_NR_PKT_TYPES)
 166                return "INVALID";
 167        else
 168                return dccp_packet_names[type];
 169}
 170
 171EXPORT_SYMBOL_GPL(dccp_packet_name);
 172
 173int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized)
 174{
 175        struct dccp_sock *dp = dccp_sk(sk);
 176        struct inet_connection_sock *icsk = inet_csk(sk);
 177
 178        icsk->icsk_rto          = DCCP_TIMEOUT_INIT;
 179        icsk->icsk_syn_retries  = sysctl_dccp_request_retries;
 180        sk->sk_state            = DCCP_CLOSED;
 181        sk->sk_write_space      = dccp_write_space;
 182        icsk->icsk_sync_mss     = dccp_sync_mss;
 183        dp->dccps_mss_cache     = 536;
 184        dp->dccps_rate_last     = jiffies;
 185        dp->dccps_role          = DCCP_ROLE_UNDEFINED;
 186        dp->dccps_service       = DCCP_SERVICE_CODE_IS_ABSENT;
 187        dp->dccps_tx_qlen       = sysctl_dccp_tx_qlen;
 188
 189        dccp_init_xmit_timers(sk);
 190
 191        INIT_LIST_HEAD(&dp->dccps_featneg);
 192        /* control socket doesn't need feat nego */
 193        if (likely(ctl_sock_initialized))
 194                return dccp_feat_init(sk);
 195        return 0;
 196}
 197
 198EXPORT_SYMBOL_GPL(dccp_init_sock);
 199
 200void dccp_destroy_sock(struct sock *sk)
 201{
 202        struct dccp_sock *dp = dccp_sk(sk);
 203
 204        /*
 205         * DCCP doesn't use sk_write_queue, just sk_send_head
 206         * for retransmissions
 207         */
 208        if (sk->sk_send_head != NULL) {
 209                kfree_skb(sk->sk_send_head);
 210                sk->sk_send_head = NULL;
 211        }
 212
 213        /* Clean up a referenced DCCP bind bucket. */
 214        if (inet_csk(sk)->icsk_bind_hash != NULL)
 215                inet_put_port(sk);
 216
 217        kfree(dp->dccps_service_list);
 218        dp->dccps_service_list = NULL;
 219
 220        if (dp->dccps_hc_rx_ackvec != NULL) {
 221                dccp_ackvec_free(dp->dccps_hc_rx_ackvec);
 222                dp->dccps_hc_rx_ackvec = NULL;
 223        }
 224        ccid_hc_rx_delete(dp->dccps_hc_rx_ccid, sk);
 225        ccid_hc_tx_delete(dp->dccps_hc_tx_ccid, sk);
 226        dp->dccps_hc_rx_ccid = dp->dccps_hc_tx_ccid = NULL;
 227
 228        /* clean up feature negotiation state */
 229        dccp_feat_list_purge(&dp->dccps_featneg);
 230}
 231
 232EXPORT_SYMBOL_GPL(dccp_destroy_sock);
 233
 234static inline int dccp_listen_start(struct sock *sk, int backlog)
 235{
 236        struct dccp_sock *dp = dccp_sk(sk);
 237
 238        dp->dccps_role = DCCP_ROLE_LISTEN;
 239        /* do not start to listen if feature negotiation setup fails */
 240        if (dccp_feat_finalise_settings(dp))
 241                return -EPROTO;
 242        return inet_csk_listen_start(sk, backlog);
 243}
 244
 245static inline int dccp_need_reset(int state)
 246{
 247        return state != DCCP_CLOSED && state != DCCP_LISTEN &&
 248               state != DCCP_REQUESTING;
 249}
 250
 251int dccp_disconnect(struct sock *sk, int flags)
 252{
 253        struct inet_connection_sock *icsk = inet_csk(sk);
 254        struct inet_sock *inet = inet_sk(sk);
 255        int err = 0;
 256        const int old_state = sk->sk_state;
 257
 258        if (old_state != DCCP_CLOSED)
 259                dccp_set_state(sk, DCCP_CLOSED);
 260
 261        /*
 262         * This corresponds to the ABORT function of RFC793, sec. 3.8
 263         * TCP uses a RST segment, DCCP a Reset packet with Code 2, "Aborted".
 264         */
 265        if (old_state == DCCP_LISTEN) {
 266                inet_csk_listen_stop(sk);
 267        } else if (dccp_need_reset(old_state)) {
 268                dccp_send_reset(sk, DCCP_RESET_CODE_ABORTED);
 269                sk->sk_err = ECONNRESET;
 270        } else if (old_state == DCCP_REQUESTING)
 271                sk->sk_err = ECONNRESET;
 272
 273        dccp_clear_xmit_timers(sk);
 274
 275        __skb_queue_purge(&sk->sk_receive_queue);
 276        __skb_queue_purge(&sk->sk_write_queue);
 277        if (sk->sk_send_head != NULL) {
 278                __kfree_skb(sk->sk_send_head);
 279                sk->sk_send_head = NULL;
 280        }
 281
 282        inet->inet_dport = 0;
 283
 284        if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK))
 285                inet_reset_saddr(sk);
 286
 287        sk->sk_shutdown = 0;
 288        sock_reset_flag(sk, SOCK_DONE);
 289
 290        icsk->icsk_backoff = 0;
 291        inet_csk_delack_init(sk);
 292        __sk_dst_reset(sk);
 293
 294        WARN_ON(inet->inet_num && !icsk->icsk_bind_hash);
 295
 296        sk->sk_error_report(sk);
 297        return err;
 298}
 299
 300EXPORT_SYMBOL_GPL(dccp_disconnect);
 301
 302/*
 303 *      Wait for a DCCP event.
 304 *
 305 *      Note that we don't need to lock the socket, as the upper poll layers
 306 *      take care of normal races (between the test and the event) and we don't
 307 *      go look at any of the socket buffers directly.
 308 */
 309unsigned int dccp_poll(struct file *file, struct socket *sock,
 310                       poll_table *wait)
 311{
 312        unsigned int mask;
 313        struct sock *sk = sock->sk;
 314
 315        sock_poll_wait(file, sk_sleep(sk), wait);
 316        if (sk->sk_state == DCCP_LISTEN)
 317                return inet_csk_listen_poll(sk);
 318
 319        /* Socket is not locked. We are protected from async events
 320           by poll logic and correct handling of state changes
 321           made by another threads is impossible in any case.
 322         */
 323
 324        mask = 0;
 325        if (sk->sk_err)
 326                mask = POLLERR;
 327
 328        if (sk->sk_shutdown == SHUTDOWN_MASK || sk->sk_state == DCCP_CLOSED)
 329                mask |= POLLHUP;
 330        if (sk->sk_shutdown & RCV_SHUTDOWN)
 331                mask |= POLLIN | POLLRDNORM | POLLRDHUP;
 332
 333        /* Connected? */
 334        if ((1 << sk->sk_state) & ~(DCCPF_REQUESTING | DCCPF_RESPOND)) {
 335                if (atomic_read(&sk->sk_rmem_alloc) > 0)
 336                        mask |= POLLIN | POLLRDNORM;
 337
 338                if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
 339                        if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk)) {
 340                                mask |= POLLOUT | POLLWRNORM;
 341                        } else {  /* send SIGIO later */
 342                                set_bit(SOCK_ASYNC_NOSPACE,
 343                                        &sk->sk_socket->flags);
 344                                set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
 345
 346                                /* Race breaker. If space is freed after
 347                                 * wspace test but before the flags are set,
 348                                 * IO signal will be lost.
 349                                 */
 350                                if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk))
 351                                        mask |= POLLOUT | POLLWRNORM;
 352                        }
 353                }
 354        }
 355        return mask;
 356}
 357
 358EXPORT_SYMBOL_GPL(dccp_poll);
 359
 360int dccp_ioctl(struct sock *sk, int cmd, unsigned long arg)
 361{
 362        int rc = -ENOTCONN;
 363
 364        lock_sock(sk);
 365
 366        if (sk->sk_state == DCCP_LISTEN)
 367                goto out;
 368
 369        switch (cmd) {
 370        case SIOCINQ: {
 371                struct sk_buff *skb;
 372                unsigned long amount = 0;
 373
 374                skb = skb_peek(&sk->sk_receive_queue);
 375                if (skb != NULL) {
 376                        /*
 377                         * We will only return the amount of this packet since
 378                         * that is all that will be read.
 379                         */
 380                        amount = skb->len;
 381                }
 382                rc = put_user(amount, (int __user *)arg);
 383        }
 384                break;
 385        default:
 386                rc = -ENOIOCTLCMD;
 387                break;
 388        }
 389out:
 390        release_sock(sk);
 391        return rc;
 392}
 393
 394EXPORT_SYMBOL_GPL(dccp_ioctl);
 395
 396static int dccp_setsockopt_service(struct sock *sk, const __be32 service,
 397                                   char __user *optval, unsigned int optlen)
 398{
 399        struct dccp_sock *dp = dccp_sk(sk);
 400        struct dccp_service_list *sl = NULL;
 401
 402        if (service == DCCP_SERVICE_INVALID_VALUE ||
 403            optlen > DCCP_SERVICE_LIST_MAX_LEN * sizeof(u32))
 404                return -EINVAL;
 405
 406        if (optlen > sizeof(service)) {
 407                sl = kmalloc(optlen, GFP_KERNEL);
 408                if (sl == NULL)
 409                        return -ENOMEM;
 410
 411                sl->dccpsl_nr = optlen / sizeof(u32) - 1;
 412                if (copy_from_user(sl->dccpsl_list,
 413                                   optval + sizeof(service),
 414                                   optlen - sizeof(service)) ||
 415                    dccp_list_has_service(sl, DCCP_SERVICE_INVALID_VALUE)) {
 416                        kfree(sl);
 417                        return -EFAULT;
 418                }
 419        }
 420
 421        lock_sock(sk);
 422        dp->dccps_service = service;
 423
 424        kfree(dp->dccps_service_list);
 425
 426        dp->dccps_service_list = sl;
 427        release_sock(sk);
 428        return 0;
 429}
 430
 431static int dccp_setsockopt_cscov(struct sock *sk, int cscov, bool rx)
 432{
 433        u8 *list, len;
 434        int i, rc;
 435
 436        if (cscov < 0 || cscov > 15)
 437                return -EINVAL;
 438        /*
 439         * Populate a list of permissible values, in the range cscov...15. This
 440         * is necessary since feature negotiation of single values only works if
 441         * both sides incidentally choose the same value. Since the list starts
 442         * lowest-value first, negotiation will pick the smallest shared value.
 443         */
 444        if (cscov == 0)
 445                return 0;
 446        len = 16 - cscov;
 447
 448        list = kmalloc(len, GFP_KERNEL);
 449        if (list == NULL)
 450                return -ENOBUFS;
 451
 452        for (i = 0; i < len; i++)
 453                list[i] = cscov++;
 454
 455        rc = dccp_feat_register_sp(sk, DCCPF_MIN_CSUM_COVER, rx, list, len);
 456
 457        if (rc == 0) {
 458                if (rx)
 459                        dccp_sk(sk)->dccps_pcrlen = cscov;
 460                else
 461                        dccp_sk(sk)->dccps_pcslen = cscov;
 462        }
 463        kfree(list);
 464        return rc;
 465}
 466
 467static int dccp_setsockopt_ccid(struct sock *sk, int type,
 468                                char __user *optval, unsigned int optlen)
 469{
 470        u8 *val;
 471        int rc = 0;
 472
 473        if (optlen < 1 || optlen > DCCP_FEAT_MAX_SP_VALS)
 474                return -EINVAL;
 475
 476        val = memdup_user(optval, optlen);
 477        if (IS_ERR(val))
 478                return PTR_ERR(val);
 479
 480        lock_sock(sk);
 481        if (type == DCCP_SOCKOPT_TX_CCID || type == DCCP_SOCKOPT_CCID)
 482                rc = dccp_feat_register_sp(sk, DCCPF_CCID, 1, val, optlen);
 483
 484        if (!rc && (type == DCCP_SOCKOPT_RX_CCID || type == DCCP_SOCKOPT_CCID))
 485                rc = dccp_feat_register_sp(sk, DCCPF_CCID, 0, val, optlen);
 486        release_sock(sk);
 487
 488        kfree(val);
 489        return rc;
 490}
 491
 492static int do_dccp_setsockopt(struct sock *sk, int level, int optname,
 493                char __user *optval, unsigned int optlen)
 494{
 495        struct dccp_sock *dp = dccp_sk(sk);
 496        int val, err = 0;
 497
 498        switch (optname) {
 499        case DCCP_SOCKOPT_PACKET_SIZE:
 500                DCCP_WARN("sockopt(PACKET_SIZE) is deprecated: fix your app\n");
 501                return 0;
 502        case DCCP_SOCKOPT_CHANGE_L:
 503        case DCCP_SOCKOPT_CHANGE_R:
 504                DCCP_WARN("sockopt(CHANGE_L/R) is deprecated: fix your app\n");
 505                return 0;
 506        case DCCP_SOCKOPT_CCID:
 507        case DCCP_SOCKOPT_RX_CCID:
 508        case DCCP_SOCKOPT_TX_CCID:
 509                return dccp_setsockopt_ccid(sk, optname, optval, optlen);
 510        }
 511
 512        if (optlen < (int)sizeof(int))
 513                return -EINVAL;
 514
 515        if (get_user(val, (int __user *)optval))
 516                return -EFAULT;
 517
 518        if (optname == DCCP_SOCKOPT_SERVICE)
 519                return dccp_setsockopt_service(sk, val, optval, optlen);
 520
 521        lock_sock(sk);
 522        switch (optname) {
 523        case DCCP_SOCKOPT_SERVER_TIMEWAIT:
 524                if (dp->dccps_role != DCCP_ROLE_SERVER)
 525                        err = -EOPNOTSUPP;
 526                else
 527                        dp->dccps_server_timewait = (val != 0);
 528                break;
 529        case DCCP_SOCKOPT_SEND_CSCOV:
 530                err = dccp_setsockopt_cscov(sk, val, false);
 531                break;
 532        case DCCP_SOCKOPT_RECV_CSCOV:
 533                err = dccp_setsockopt_cscov(sk, val, true);
 534                break;
 535        case DCCP_SOCKOPT_QPOLICY_ID:
 536                if (sk->sk_state != DCCP_CLOSED)
 537                        err = -EISCONN;
 538                else if (val < 0 || val >= DCCPQ_POLICY_MAX)
 539                        err = -EINVAL;
 540                else
 541                        dp->dccps_qpolicy = val;
 542                break;
 543        case DCCP_SOCKOPT_QPOLICY_TXQLEN:
 544                if (val < 0)
 545                        err = -EINVAL;
 546                else
 547                        dp->dccps_tx_qlen = val;
 548                break;
 549        default:
 550                err = -ENOPROTOOPT;
 551                break;
 552        }
 553        release_sock(sk);
 554
 555        return err;
 556}
 557
 558int dccp_setsockopt(struct sock *sk, int level, int optname,
 559                    char __user *optval, unsigned int optlen)
 560{
 561        if (level != SOL_DCCP)
 562                return inet_csk(sk)->icsk_af_ops->setsockopt(sk, level,
 563                                                             optname, optval,
 564                                                             optlen);
 565        return do_dccp_setsockopt(sk, level, optname, optval, optlen);
 566}
 567
 568EXPORT_SYMBOL_GPL(dccp_setsockopt);
 569
 570#ifdef CONFIG_COMPAT
 571int compat_dccp_setsockopt(struct sock *sk, int level, int optname,
 572                           char __user *optval, unsigned int optlen)
 573{
 574        if (level != SOL_DCCP)
 575                return inet_csk_compat_setsockopt(sk, level, optname,
 576                                                  optval, optlen);
 577        return do_dccp_setsockopt(sk, level, optname, optval, optlen);
 578}
 579
 580EXPORT_SYMBOL_GPL(compat_dccp_setsockopt);
 581#endif
 582
 583static int dccp_getsockopt_service(struct sock *sk, int len,
 584                                   __be32 __user *optval,
 585                                   int __user *optlen)
 586{
 587        const struct dccp_sock *dp = dccp_sk(sk);
 588        const struct dccp_service_list *sl;
 589        int err = -ENOENT, slen = 0, total_len = sizeof(u32);
 590
 591        lock_sock(sk);
 592        if ((sl = dp->dccps_service_list) != NULL) {
 593                slen = sl->dccpsl_nr * sizeof(u32);
 594                total_len += slen;
 595        }
 596
 597        err = -EINVAL;
 598        if (total_len > len)
 599                goto out;
 600
 601        err = 0;
 602        if (put_user(total_len, optlen) ||
 603            put_user(dp->dccps_service, optval) ||
 604            (sl != NULL && copy_to_user(optval + 1, sl->dccpsl_list, slen)))
 605                err = -EFAULT;
 606out:
 607        release_sock(sk);
 608        return err;
 609}
 610
 611static int do_dccp_getsockopt(struct sock *sk, int level, int optname,
 612                    char __user *optval, int __user *optlen)
 613{
 614        struct dccp_sock *dp;
 615        int val, len;
 616
 617        if (get_user(len, optlen))
 618                return -EFAULT;
 619
 620        if (len < (int)sizeof(int))
 621                return -EINVAL;
 622
 623        dp = dccp_sk(sk);
 624
 625        switch (optname) {
 626        case DCCP_SOCKOPT_PACKET_SIZE:
 627                DCCP_WARN("sockopt(PACKET_SIZE) is deprecated: fix your app\n");
 628                return 0;
 629        case DCCP_SOCKOPT_SERVICE:
 630                return dccp_getsockopt_service(sk, len,
 631                                               (__be32 __user *)optval, optlen);
 632        case DCCP_SOCKOPT_GET_CUR_MPS:
 633                val = dp->dccps_mss_cache;
 634                break;
 635        case DCCP_SOCKOPT_AVAILABLE_CCIDS:
 636                return ccid_getsockopt_builtin_ccids(sk, len, optval, optlen);
 637        case DCCP_SOCKOPT_TX_CCID:
 638                val = ccid_get_current_tx_ccid(dp);
 639                if (val < 0)
 640                        return -ENOPROTOOPT;
 641                break;
 642        case DCCP_SOCKOPT_RX_CCID:
 643                val = ccid_get_current_rx_ccid(dp);
 644                if (val < 0)
 645                        return -ENOPROTOOPT;
 646                break;
 647        case DCCP_SOCKOPT_SERVER_TIMEWAIT:
 648                val = dp->dccps_server_timewait;
 649                break;
 650        case DCCP_SOCKOPT_SEND_CSCOV:
 651                val = dp->dccps_pcslen;
 652                break;
 653        case DCCP_SOCKOPT_RECV_CSCOV:
 654                val = dp->dccps_pcrlen;
 655                break;
 656        case DCCP_SOCKOPT_QPOLICY_ID:
 657                val = dp->dccps_qpolicy;
 658                break;
 659        case DCCP_SOCKOPT_QPOLICY_TXQLEN:
 660                val = dp->dccps_tx_qlen;
 661                break;
 662        case 128 ... 191:
 663                return ccid_hc_rx_getsockopt(dp->dccps_hc_rx_ccid, sk, optname,
 664                                             len, (u32 __user *)optval, optlen);
 665        case 192 ... 255:
 666                return ccid_hc_tx_getsockopt(dp->dccps_hc_tx_ccid, sk, optname,
 667                                             len, (u32 __user *)optval, optlen);
 668        default:
 669                return -ENOPROTOOPT;
 670        }
 671
 672        len = sizeof(val);
 673        if (put_user(len, optlen) || copy_to_user(optval, &val, len))
 674                return -EFAULT;
 675
 676        return 0;
 677}
 678
 679int dccp_getsockopt(struct sock *sk, int level, int optname,
 680                    char __user *optval, int __user *optlen)
 681{
 682        if (level != SOL_DCCP)
 683                return inet_csk(sk)->icsk_af_ops->getsockopt(sk, level,
 684                                                             optname, optval,
 685                                                             optlen);
 686        return do_dccp_getsockopt(sk, level, optname, optval, optlen);
 687}
 688
 689EXPORT_SYMBOL_GPL(dccp_getsockopt);
 690
 691#ifdef CONFIG_COMPAT
 692int compat_dccp_getsockopt(struct sock *sk, int level, int optname,
 693                           char __user *optval, int __user *optlen)
 694{
 695        if (level != SOL_DCCP)
 696                return inet_csk_compat_getsockopt(sk, level, optname,
 697                                                  optval, optlen);
 698        return do_dccp_getsockopt(sk, level, optname, optval, optlen);
 699}
 700
 701EXPORT_SYMBOL_GPL(compat_dccp_getsockopt);
 702#endif
 703
 704static int dccp_msghdr_parse(struct msghdr *msg, struct sk_buff *skb)
 705{
 706        struct cmsghdr *cmsg = CMSG_FIRSTHDR(msg);
 707
 708        /*
 709         * Assign an (opaque) qpolicy priority value to skb->priority.
 710         *
 711         * We are overloading this skb field for use with the qpolicy subystem.
 712         * The skb->priority is normally used for the SO_PRIORITY option, which
 713         * is initialised from sk_priority. Since the assignment of sk_priority
 714         * to skb->priority happens later (on layer 3), we overload this field
 715         * for use with queueing priorities as long as the skb is on layer 4.
 716         * The default priority value (if nothing is set) is 0.
 717         */
 718        skb->priority = 0;
 719
 720        for (; cmsg != NULL; cmsg = CMSG_NXTHDR(msg, cmsg)) {
 721
 722                if (!CMSG_OK(msg, cmsg))
 723                        return -EINVAL;
 724
 725                if (cmsg->cmsg_level != SOL_DCCP)
 726                        continue;
 727
 728                if (cmsg->cmsg_type <= DCCP_SCM_QPOLICY_MAX &&
 729                    !dccp_qpolicy_param_ok(skb->sk, cmsg->cmsg_type))
 730                        return -EINVAL;
 731
 732                switch (cmsg->cmsg_type) {
 733                case DCCP_SCM_PRIORITY:
 734                        if (cmsg->cmsg_len != CMSG_LEN(sizeof(__u32)))
 735                                return -EINVAL;
 736                        skb->priority = *(__u32 *)CMSG_DATA(cmsg);
 737                        break;
 738                default:
 739                        return -EINVAL;
 740                }
 741        }
 742        return 0;
 743}
 744
 745int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
 746                 size_t len)
 747{
 748        const struct dccp_sock *dp = dccp_sk(sk);
 749        const int flags = msg->msg_flags;
 750        const int noblock = flags & MSG_DONTWAIT;
 751        struct sk_buff *skb;
 752        int rc, size;
 753        long timeo;
 754
 755        if (len > dp->dccps_mss_cache)
 756                return -EMSGSIZE;
 757
 758        lock_sock(sk);
 759
 760        if (dccp_qpolicy_full(sk)) {
 761                rc = -EAGAIN;
 762                goto out_release;
 763        }
 764
 765        timeo = sock_sndtimeo(sk, noblock);
 766
 767        /*
 768         * We have to use sk_stream_wait_connect here to set sk_write_pending,
 769         * so that the trick in dccp_rcv_request_sent_state_process.
 770         */
 771        /* Wait for a connection to finish. */
 772        if ((1 << sk->sk_state) & ~(DCCPF_OPEN | DCCPF_PARTOPEN))
 773                if ((rc = sk_stream_wait_connect(sk, &timeo)) != 0)
 774                        goto out_release;
 775
 776        size = sk->sk_prot->max_header + len;
 777        release_sock(sk);
 778        skb = sock_alloc_send_skb(sk, size, noblock, &rc);
 779        lock_sock(sk);
 780        if (skb == NULL)
 781                goto out_release;
 782
 783        skb_reserve(skb, sk->sk_prot->max_header);
 784        rc = memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len);
 785        if (rc != 0)
 786                goto out_discard;
 787
 788        rc = dccp_msghdr_parse(msg, skb);
 789        if (rc != 0)
 790                goto out_discard;
 791
 792        dccp_qpolicy_push(sk, skb);
 793        /*
 794         * The xmit_timer is set if the TX CCID is rate-based and will expire
 795         * when congestion control permits to release further packets into the
 796         * network. Window-based CCIDs do not use this timer.
 797         */
 798        if (!timer_pending(&dp->dccps_xmit_timer))
 799                dccp_write_xmit(sk);
 800out_release:
 801        release_sock(sk);
 802        return rc ? : len;
 803out_discard:
 804        kfree_skb(skb);
 805        goto out_release;
 806}
 807
 808EXPORT_SYMBOL_GPL(dccp_sendmsg);
 809
 810int dccp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
 811                 size_t len, int nonblock, int flags, int *addr_len)
 812{
 813        const struct dccp_hdr *dh;
 814        long timeo;
 815
 816        lock_sock(sk);
 817
 818        if (sk->sk_state == DCCP_LISTEN) {
 819                len = -ENOTCONN;
 817
 818     s="line" name="L818"> 818/dccp/proto.c#L727" id="L727" classlease12/dccp/proto.c#L782" id="L782" cla8cmsg" cla8s="sref">cmsg))
 765        tircvde=tif="+code=dccp_qpolicy_push" class="sref">dccp_qpolicy_pushlenlock_sock(EINVAL;
 724
SOL_DCCP)
 751        struct  818        if (  name="L751"> 751<810eive_15"> enlock_sock( 727
 780        if (skb == timrefunblock" class="sverify_f">timrefun/proto.c#L82oc#L/prot a1.c#L819" i class="s8ef">cmsg_type))
EINVAL;
 788         813        const      kfree_skb( 731
cmsg_type) {
 == DC8P_SCM_PRIORITY:
__u32)))
 722" namPKT"+codAC=03EINVAL;
cmsg);
 756    " namPKT"CLOS503 756    " namPKT"CLOS5REQ03EINVAL;
noblock =  722"+coPEE=ref="+code=dccps_xmit_timer" class840"> 740<8a>                }
 788        rc<      _p   ive_cloe=a>        lock_sock( 741        }
L771" id="L771" class="lfall through="line" name="L797"> 797 742<8a>        return 0;
" namPKT"RESEs03DC8me="L743"> 743}
 788         pr_debu=a>    L771" id="L7#L7name>"found>    (%s) ok!\n"ine" nasref">msghdr * 744
 788        
<"line" name="L810"> p    *_a>
 ==sref">lock_sock(msg,
 788      "line" name="L819"> 819 id="L742" class="line" name="L8de=len" c8ass="sref">len)
 747{
 78ode=sk" c8ass="sref">sk);
 788         pr_debu=a>    L771" id="L7#L7name>"p    *_+cod=%s\n"ine" nasref">msghdr *msg_flags;
 788        
<"line" name="L810"> p    *_a>
 ==sref">lock_sock(MSG_DONTWAIT;
        if (ska eatskb"f="+code=dccp_qpolicy_push" class="sref">dccp_qpolicy_pushskb_putfale=rc" class="sreffale=ss="sref">lock_sock(skb;
 818=size" cl8ss="sref">size;
timrefunblock" class="sverify_f">timrefun/pro" class="line" name="L738"> 78imeo" cla8s="sref">timeo;
tis="smeo" class="sref">tis="sf="+code=dccp_qpolicy_push" class="sref">dccp_qpolicy_push 756    SOCKgs ==s  754
 788      "line" name="L819"> 819 id="L742" class="line" name="L8s="sref">8ccps_mss_cache)
 7378E" class=8sref">EMSGSIZE;
 818="line" n8ame="L757"> 757
sk);
 818        if ( 813  ==  759
 788      "line" name="L819"> 819 728" class="lina">tier"o"L813"> 813 <">tier"o"a>        lock_sock(sk)) {
 7378AIN" clas8="sref">EAGAIN;
 818class="sr8f">out_release;
 763        }
 818        if (noblock =  ==  764
 788      "line" name="L819"> 819 id="L742" class="line" name="L8k" class=8sref">noblock);
 7378s="line" 8ame="L766"> 766
 818pan class8"comment">/*

 818        if (sk->" namCLOS5Da> == 
tis="smeo" class="sref">tis="sf="+code=dccp_qpolicy_push" class="sref">dccp_qpolicy_push 756    SOCKgs ==s L771" id="L771" class="lTmmenoccursline" ef">L769e class=apriority happens later (on layer 3),8nnection 8o finish. */
 71never"L771"> ed f">tet       * network. Window-based CCIDs8s="sref">8CCPF_PARTOPEN))
 797timeo)) != 0)
="L819" class="line" name="L819"> 819                len = -out_release;
 7378s="line" 8ame="L775"> 775
 818de=len" c8ass="sref">len;
 788      "line" name="L819"> 819 id="L742" class="line" name="L8ode=sk" c8ass="sref">sk);
 7378sset sk_w8ass="sref">rc);
 818ode=sk" c8ass="sref">sk);
NULL)
 out_release;
="L819" class="line" name="L819"> 819                rc = - 782
 7378class="sr8f">max_header);
 818olass="sr8ss="sref">len);
rc != 0)
 798 798 ==s out_discard;
 788      "line" name="L819"> 819 728" class="lina">tiintrier"nimeo" class="sref">tiintrier"nif="+code=dccp_qpolicss="f="+code=sk" class="sref">s="line" name="L737"> 7378cde=sk" c8ame="L787"> 787
 7378e=skb" cl8ss="sref">skb);
 818rc" class8"sref">rc != 0)
out_discard;
dccp_wait_connect(s="line" name="L737"> 7378s="line" 8ame="L791"> 791
 726   8e=skb" cl8ss="sref">skb);
 78pan class8"comment">/*
 755        if ( 736                        size_t  788      "line" name="L819"> 819         if ( 736                         726   8ec" class8ets into the
 755772" class="line" name="L736"> 736                        size_t 
 788      ref="+code=flags" class="sref">flags = msg         if ( 722"+coTRUNCass=line" name="L726"> 726   8ede=sk" c8>         */
dc8ps_xmit_timer))
skb, len), msg->sk);
L771" id="L771" class="lExcehe sk. Bailout!=*line" name="L797"> 797out_release:
        if ("line" name="L819"> 819                aFAULsass=line" name="L726"> 726   9ode=sk" c9ass="sref">sk);
 7379de=len" c9ass="sref">len;
 819class="sr9f">out_discard:
noblock =  722"+coTRUNCass="sref">size_t skb);
 788      "line" name="L819"> 819         if ( 736                         726   9class="sr9f">out_release;
 79="line" n9me="L806"> 806}
noblock =  722"+coPEE=ref="+code=dccps_xmit_timer" class9s="line" 9ame="L807"> 807
ska eatskb"f="+code=dccp_qpolicy_push" class="sref">dccp_qpolicy_pushskb_putfale=rc" class="sreffale=ss="sref">lock_sock(dccp_sendmsg);
 7379s="line" 9ame="L809"> 809
lock_sock(msg,
skb_put" name="8sref"82.dccp/pro" class="line" name="L738"> 79n" class=9sref">addr_len)
 801        release_sock( 812{
 726   9code=dh" 9lass="sref">dh;
 819imeo" cla9s="sref">timeo;
 815
 808 810int f">release_sock(sk);
 817
 listef="+code=size_t"817t_10"> listeff="+cf">kiocb * 811+coe dccp/  struct ia>, int size_t DCCP_LISTEN) {
ENOTCONN;
kiocb *iocb, struct  728" class="lina">tde=iocb" class="sref">ilicy_param_ok(release_sock( 817
 818unaigned char820" class="line"ld href="+code=sk" clas"ld href=lass">release_sock( 813 er"a> =">release_sock(cmsg))
EINVAL;
 816        lock_sock( 724
SOL_DCCP)
 813 er"a> =a>                 739                        return -tde=iocb" class="sref">ilicy_param_ok(sk->SS_UNCONNECT5Dgtde=iocb" class="sref">ilicy_param_ok(SOCKgsCCPass="sref">size_t  727
 &&
cmsg_type))
        size = skEINVAL;
->a href="+code=sk_stateCLOS5D" class="sref">" naFmCLOS5Da> =; ~(sk_Fstate =="+code=dccps_xmit_timer" class9s="line" 9ame="L731"> 731
cmsg_type) {
DC9P_SCM_PRIORITY:
 797__u32)))
EINVAL;
 797cmsg);
->sk_state ==  793        <93M_QPOLIC9           default:
 793        <9VAL" clas9="sref">EINVAL;
 listef hrertline" name="L793"> 793        <9VAL" clas9a>                }
 797 741        }
 813 er"a> =a> ode=EXPORT_SYMBOL_GPlistef hrert"line" name="L810"> listef hrertli"+code=dccp_qpolicy_push" class="sref">dccp_qpolicy_push 742<9a>        return 0;
 813 er"a> =+code=dccps_xmit_timer" class9Vsref">DC9me="L743"> 743}
 744
 819n" class=9ass="sref">msg,
size = skack_backlo="line" name="L8skack_backlo=a> =a> ode=EXPORT_SYMBbacklo="line" name="L8backlo=ass=to.c#L82oc#L/prot a1.c#L819" 9sde=sk" c9ass="sref">len)
 813 er"a> =a> id="L742" class="line" name="L9="line" n9me="L747"> 747{
sk);
skb_put" name="8sref"82.dccp/pro" class="line" name="L738"> 79" class="9ref">msg_flags;
 801        release_sock(MSG_DONTWAIT;
 813 er"a> =">release_sock(skb;
 819=size" cl9ss="sref">size;
timeo;
 808 listef="+code=size_t"817t_10"> listeff="+f">release_sock( 754
9ccps_mss_cache)
  L771"> 771"line" name="L810"> t  L771"> 771f="+cf">kiocb *iocb, struct EMSGSIZE;
 757
 =a> ode=EXPORT_SYMBode=sCLOS5D" class="sref">" namCLOS5Da> =">release_sock(sk);
 759
 772        if ((1 << sksk)) {
 756    " namPASSIVE"CLOS5/pro" class="line" name="L738"> 79AIN" clas9="sref">EAGAIN;
 756    " namPASSIVE"CLOS5REQ/pro" class="line" name="L738"> 79Asize" cl9f">out_release;
rc<      _p   ive_cloe=a>        lock_sock( 763        }
 7379s="line" 9ame="L764"> 764
DCCPF_OEN |  79A="sref">9sref">noblock);
 pr_debu=a>    L771" id="L7#L7name>"Stop N | nt">   (%p)\n"ine" nasc#L776" id="L776"href="+code=size" classref">lock_sock( 766
dccp_qpolicy_push 722ICSK_TIME_DAC=classref">lock_sock(/*
 797
DCCPF_OE> |  79st_sent_s9ate_process.
rc< hrefcloe=li"+code=dccp_qpolicy_push" class="sref">dccp1sref">lock_sock(         */

rc< _push" class="sr">rc< _a>        rcrerol=a> =a>> ode=EXPORT_SYMBode=sROLE_S5RVERlass="sref">DCCPF_OEROLE_S5RVERa> =a>->>->/proto.c#L791" id="L791" cla9nsize" cl9CCPF_PARTOPEN))
rc< _push" class="sr">rc< _a>        rcre/a>  rcode= ef= cla+code=dccps_xmit_timer" class9lass="sre9">timeo)) != 0)
 =a> ode=EXPORT_SYMBode=sACTIVE"CLOS5REQ6"> 756    " namACTIVE"CLOS5REQa> =">release_sock(out_release;
release_sock(9ame="L775"> 775
 =a> ode=EXPORT_SYMBode=sCLOSING" class="sref">" namCLOSINGa> =">release_sock(len;
 797sk);
 79sset sk_w9ass="sref">rc);
dccp_qpolicy_push =sref">lock_sock(sk);
lock_sock(NULL)
lock_sock(out_release;
 782
rckiocb *iocb, struct max_header);
len);
iocb, struct tima> ode=EXPORT_SYMBOL_GP _push" class="sr">rc< _a>        lock_sock(9"sref">rc != 0)
 751        struct lock_sock(out_discard;
de=socu3/dccp/ode=EXPORT_SYMBOata_was_uns=appush" class="sr"ata_was_uns=apa> =a> id="L742" class="line" name="L9cde=sk" c9ame="L787"> 787
skskb);
rc != 0)
 816        lock_sock(out_discard;
 791
 818        if (n>-> 722SHUTDOW"_MAS=>skskb);
/*
 818        if (sk->sk_state == 
dccp_qpolicy_push" namCLOS5Da> ==d="L742" class="line" name="L9e="sref">9ets into the

 797         */
        lock_sock())
10oddccp/proto.c#L738" id="L762" class="lineadjudge_to_deatcode=dccp_hdr" cadjudge_to_deatc>sksk" 2a/cc/7a651d0cb5ff199c841ecf15ffe2a48c607e_3/10ode>proto.c#L809" id="L809" cla10o1e=sk" c10o">out_discard;
>10o2e8"> 818     s="line" name="L818"> 8110o2e=sk" c10ome="L791"> 791
10o/dccp/proto.c#L782" id="L782" cla10o3e=sk" c10os="sref">skb);
10o/dccp/proto.c#L783" id="L783s="sropcode=dp" class="sref"s="sropcode=dli"+code=dccp_qpolicy_push" class="sref">dccp_wait_connect(timer_pending(&lock_sock(/*
10o/dccp/proto.c#L724" id="L724" cla10o5e=sk" c10owill expire
10o/dccp/proto.c#L793" id="L793" class="line" name="L793"> 793        <10o6e=sk" c10ots into the
10o/dccp/proto.c#L796" id="L796" class=" We needclasflush> s.  We do> 793        <10o7e=sk" c10othis timer.
10o7dccp/proto.c#L796" id="L796" class=" descriptor cloe=, not    tocol-sourced cloe=s, because> 793        <10o8e=sk" c10o         */
10o8dccp/proto.c#L796" id="L796" class= *s=aper    cess may not have drained  793        <10o9e=sk" c10os_xmit_timer))
10o/dccp/proto.c#L769" id="L769" class="line" name="L797"> 797 809
10amdccp/proto.cwhile (L728" class="linass="line" name="L780"> 780c#L783" id="L783_skb"_de15">  name="L751"> 7_skb"_de15"> li"+chref="+code=timer_peass="line" name="L818"> 818        if (  name="L751"> 751<810eive_15"> en->msg,
10a/dccp/proto.c#L761" id="L761" class=+ata_was_uns=appush" class="sr"ata_was_uns=apa> =a+>         if ( 736                         726   10a2e=sk" c10sref">addr_len)
10a/dccp/proto.c#L762" i#L816" id="L816__kfreeskb" class="sref">s__kfreeskb"li"+code=dccp_qpolicy_de=kfree_skb" class="sref">kfree_skb( 812{
10a3e8"> 818     s="line" name="L818"> 811014e=sk" c10lass="sref">dh;
10a/dccp/proto.c#L724" id="L724" cla1015e=sk" c10s="sref">timeo;
 =r  815
10a/dccp/proto.c#L756" ioL793" id="L793" class="lUns=apa"ata wasclassed,  hre 93"apLISprief= Re ht C"li="line" name="L797"> 797sk);
10a/dccp/proto.c#L737" iode=EXPORT_SYMB" namWARte" class="sref">sk_sWARta>    L771" id="L7#L7name>"ABORT with %u bytes uns=ap\n"ine" nasc#L776" id="L776"ata_was_uns=appush" class="sr"ata_was_uns=apa> =rf">kfree_skb( 817
10a/dccp/proto.c#L738" i#de=EXPORT_SYMB">rc< hrefre htrc" class="sref">rc< hrefre htli"+code=dccp_qpolicy_push" class="sref">dccp_qpolicy_push" namRESEs_CODE_ABORT5Da> =rf">kfree_skb(DCCP_LISTEN) {
DC>10a/dccp/proto.c#L729" iode=EXPORT_SYMBOL_GP ht href="+code=sk" clasOL_GP ht href=li"+code=dccp_qpolicy_push" class="sref">dccp_qpolicy_push" namCLOS5Da> ==d="L742" class="line" name="L102de=sk" c10sref">ENOTCONN;
10sre8"> 818 ielseid="L728" class="lina">tis="smeo" class="sref">tis="sf="+code=dccp_qpolicy_push" class="sref">dccp_qpolicy_pushDCCSOCKgLINGERa> =r >->>->a8" id="L798" claass="line" name="L818"> 818        if ( 751 =r  81710s/dccp/proto.c#L761" idL793" id="L793" class="lCheck zero ONNger _after_ checkNNg for uns=apa"ata.="line" name="L797"> 79710s/dccp/proto.c#L762" i#L816" id="L816ass="line" name="L818"> 818        if ( 751timer_pending(& "+code=sk" clasOisL771"> f="+code=dccp_qpolicy_push" class="sref">dccp0=d="L742" class="line" name="L1023e=sk" c10s="sref">cmsg))
 818 ielseid="L728" class="linass="line" name="L818"> 818        if (sk->" namCLOS5Da> == EINVAL;
 793        <1025e=sk" c10ame="L724"> 724
10s/dccp/proto.c#L795" id="L795" class=========* Normalcd771"> 771 t sk. May needclas ef= 793        <1026e=sk" c10sref">SOL_DCCP)
10s/dccp/proto.c#L796" id="L796" class=========* still p    *s 769 910s7dccp/proto.c#L796" id="L796" class=========*line" name="L797"> 797 727
10s/dccp/proto.c#L738" i#de=EXPORT_SYMB">rc  name="L751"> 7">rc li"+code=dccp_qpolicy_push" class="sref">dccp_wait_connect( &&
10s/dccp/proto.c#L729" iode=EXPORT_SYMBOL_GPt  L771"> 771"line" name="L810"> t  L771"> 771f="+c     lock_sock(cmsg_type))
10efe8"> 818     s="line" name="L818"> 811031e=sk" c10="sref">EINVAL;
 731
10e/dccp/proto.c#L793" id="L793" class="line" name="L793"> 793        <1033e=sk" c10f">cmsg_type) {
>10e/dccp/proto.c#L713" id="L713" class=* Flush>write 15"> .lTmmenmay be necessary 769severalcd="Ls:line" name="L793"> 793        <1034e=sk" c10P_SCM_PRIORITY:
10e4dccp/proto.c#L713" id="L713" class=* -lie have been cloe=dcby9 ska"ata;line" name="L793"> 793        <1035e=sk" c10"sref">__u32)))
10e/dccp/proto.c#L795" id="L795" class="l- aborodve t sk (uns=apa"ata or zero ONNger ss="),line" name="L793"> 793        <1036e=sk" c10="sref">EINVAL;
 sk but 15"> 9couldsnot be flush=dcwith769 793        <10e7e=sk" c10s="sref">cmsg);
 79710e/dccp/proto.c#L788" id="L788_skb"_15"> _purg  name="L751"> 7_skb"_15"> _purg li"+chref="+code=timer_peass="line" name="L818"> 818        if (  name="L751"> 7 ss="sref">lock_sock(10e/dccp/proto.c#L809" id="L809" cla104de=sk" c10="sref">EINVAL;
dccp_qpolicy_push                }
 >10=/dccp/proto.c#L791" id="L791" cla1042e=sk" c10"> 741        }
 >10=/dccp/2" class="lineadjudge_to_deatcode=dccp_hdr" cadjudge_to_deatc>sk<" class="line" name="L738"> 710=3e=sk" c10a>        return 0;
 >10=/dccp/proto.c#L783" id="L783sref="+code=sk" classref">sk        size = sk 743}
10=/dccp/proto.c#L804" id="L804f">tiholppush" class="srf">tiholpf="+c     lock_sock( 744
10=5dccp/proto.c#L804" id="L804f">tiorphaine" name="L819"<">tiorphaif="+c     lock_sock(msg,
10=/dccp="L742" class="line" name="L10=7e=sk" c10ass="sref">len)
10=7dccp/proto.c#L793" id="L793" class="line" name="L793"> 793        <1048e=sk" c10me="L747"> 747{
10=8dccp/proto.c#L796" id="L796" class=* I ="co     769i*s lif .lI =will removpabacklo=       * network. Window-based CCIDs1049e=sk" c10ass="sref">sk);
10=/dccp/proto.c#L769" id="L769" class="line" name="L797"> 797msg_flags;
10redccp/proto.c#L804" id="L804" class="line" name="L801"> 801        release_sock(MSG_DONTWAIT;
M>10r1dccp/proto.c#L793" id="L793" class="line" name="L793"> 793        <1052e=sk" c10ass="sref">skb;
10r/dccp/proto.c#L712" id="L712" class=* Nowa1+coe ="coown=dcby9kernel andlie acquire BH l     ne" name="L793"> 793        <1053e=sk" c10ss="sref">size;
10r/dccp/proto.c#L713" id="L713" class=* lasf      cloe=. No needclascheck for uf">LL79s       * network. Window-based CCIDs1054e=sk" c10s="sref">timeo;
 797 754
10r5dccp/proto.c#L804" id="L804l  al_bh_disabl=rc" class="srefl  al_bh_disabl=    release_sock()
10r/dccp/proto.c#L776" id="L776bh_" class="line" name="L81bh_" class="    release_sock(EMSGSIZE;
10r/dccp/proto.c#L816" id="L816WARt_Ote" class="sref"WARt_Ot    tiown=d_by_uf">ne" name="L819"<">tiown=d_by_uf">    release_sock( 757
10r/dccp/proto.c#L688" id="L688" cla10r9e=sk" c10ass="sref">sk);
10r9dccp/proto.c#L816" id="L816percpu_counter_ine=rc" class="srepercpu_counter_ine     751timer_pending(&orphai_count name="L751"> 7orphai_count"sref">release_sock( 759
10amdccp/proto.c#L688" id="L688" cla1061e=sk" c10s="sref">sk)) {
 797EAGAIN;
sk->" namCLOS5Da> = >->>->a728" class="linass="line" name="L818"> 818        if (sk->" namCLOS5Da> ==me="L797"> 797out_release;
>10a/dccp/proto.c#L733" id="L762" class="line" name="8sref"82.dccp/proto.c#L82oc#L/prot a1.c#L819" 10a4e=sk" c10"> 763        }
 >10a/dccp/proto.c#L724" id="L724" cla1065e=sk" c10ame="L764"> 764
10a/dccp/proto.cd="L728" class="linass="line" name="L818"> 818        if (sk->" namCLOS5Da> ==me="L797"> 797noblock);
10a/dccp/proto.c#L756" iode=EXPORT_SYMB817t_cs="desrsoyass="line" name="L81817t_cs="desrsoyass="    release_sock( 766
10a/dccp/proto.c#L817" id="L817" cla10a8e=sk" c10"comment">/*
10a8dccp/proto.c#L793" id="L793" class=" O 797
10a/dccp/proto.c#L809" id="L809" cla107de=sk" c10ate_process.
10atdccp/2" class="line" name="8sref"82.dccp/pro" class="line" name="L738"> 710a1e=sk" c10>         */
  >10a1dccp/proto.c#L816" id="L816bh_un" class="line" name="L81bh_un" class="    release_sock(
10a/dccp/proto.c#L792" id="L792l  al_bh_enabl=rc" class="srefl  al_bh_enabl=    release_sock())
10a/dccp/proto.c#L783" id="L783s clap name="8sref"82.ds clap n    release_sock(timeo)) != 0)
t>10a/dccp     s="line" name="L818"> 8110a5e=sk" c10f">out_release;
>10a/dccp/proto.c#L815" id="L815" cla10a6e=sk" c10ame="L775"> 775
10a/dccp               808rcrelease_sock(len;
10a/dccp/proto.c#L817" id="L817" cla1078e=sk" c10ass="sref">sk);
10a8dccpvoid ode=EXPORT_SYMBOL_GPhhutdowine" name="L819"OL_GPhhutdowif="+cf">kiocb *iocb, struct  797rc);
10a/dccpsk);
10asdccp/proto.c#L783" id="L783OL_GPpr_debu="line" name="L810"> pr_debu=a>    L771" id="L7#L7name>" alledchhutdowi(%x)\n"ine" nasc#L776" id="L776howhref="+code=sochowa> ==">release_sock(NULL)
10a/dccp}ef">lock_sock(out_release;
>10a/dccp/proto.c#L782" id="L782" cla1083e=sk" c10ame="L782"> 782
10a3dccp               808release_sock(max_header);
>10a/dccp/proto.c#L724" id="L724" cla1085e=sk" c10ss="sref">len);
10a/dccphrefic ode=EXPORT_SYMB81enne" name="L8181enrcPmib_inf=f="+cvoid=me="L797"> 797rc != 0)
10a6dccpout_discard;
>10a/dccp/proto.c#L802" id="L802" classsnmGPmib_inf=rc" class="srefsnmGPmib_inf=f="+c(void ode=EXPORT_SYMB__percpu name="L751"> 7_spercpuf">ioc*)ode=EXPORT_SYMBOL_GPhrefisficde=noblock" clasOL_GPhrefisficd clasa href="+code=DCCP_LISTEN" c1088e=sk" c10ame="L787"> 787
10a/dccp/proto.c#L738" i class=""""""sizeofcf">kiocb *rcPmibf="+=sa href="+code=DCCP_LISTEN" c1089e=sk" c10ss="sref">skb);
10a/dccp/proto.c#L729" ioto.c#L756" iode=EXPORT_SYMB__alignof__ name="L751"> 7_salignof__f="+cf">kiocb *rcPmibf="+==">release_sock(rc != 0)
10"sdccp}ef">lock_sock(out_discard;
>10"/dccp/proto.c#L791" id="L791" cla1092e=sk" c10ame="L791"> 791
10"2dccphrefic ode=EXPORT_SYMB81enne" name="L8181enrcPmib_exf=f="+cvoid=me="L797"> 797skb);
10"3dccp/*
10"/dccp/proto.c#L804" id="L804fnmGPmib_freerc" class="srefsnmGPmib_freef="+c(void ode=EXPORT_SYMB__percpu name="L751"> 7_spercpuf">ioc*)ode=EXPORT_SYMBOL_GPhrefisficde=noblock" clasOL_GPhrefisficd cla=">release_sock(
10"5dccp}ef">lock_sock(
10"/dccp="L742" class="line" name="L1097e=sk" c10 this timer.
10"7dccphrefic #L752" id="L752" clthash_enL7nede=noblock" clasthash_enL7ned/proto.c#L82oc#L/prot a1.c#L819" 1098e=sk" c10>         */
  >10"8dccp              ))
10"/dccpef">skb_putMODULEEN 722"ODULEEN))
110mdccp/proto.c#L688" id="L688" cla11o1e=sk" c11o">out_discard;
>11o2e8">#ifdef52" id="L752" clCONFIG_IPgsCCP_DEBUG" class="sref">CONFIG_IPgsCCP_DEBUGdccp/proto.c#L688" id="L688" cla11o2e=sk" c11ome="L791"> 791
110/dccp/2" class="lineboolline" name="L81boolf">ioode=EXPORT_SYMBOL_GPdebu="line" name="L810"> debu=a>  ">release_sock(skb);
1103dccp               debu=a>  cp_qpolicy_pushi, 0644=">release_sock(/*
110/dccp               722"ODULEEN debu=a>  cp_L771" id="L7#L7name>"Enabl= debu= messages"ine" na=">release_sock(
110/dccp/proto.c#L815" id="L815" cla11o6e=sk" c11ots into the
110/dccp               808 debu=a>  =">release_sock(
11o7dccp#endif>release_sock(
110/dccp/proto.c#L688" id="L688" cla11o9e=sk" c11os_xmit_timer))
11o/dccphrefic #L752" id="L752" cl__inf=rc" class="sref__inf=f="+oode=EXPORT_SYMBOL_GPinf=rc" class="sref">rcPinf=f="+cvoid=me="L797"> 797 809
11amdccpmsg,
1112e8"> 818unaigned #L814" id="L814" clagoalline" name="L81goala>  ">release_sock(addr_len)
11a/dccp/proto.c#L752" id="L752" clehash_ord">ne" name="L819"ehash_ord">a>  cp_qpolicy_pushne" name="L819"bhash_ord">a>  cp_qpolicy_pushne" name="L818a>  ">release_sock( 812{
11a3e8"> 818#L752" id="L752" clre=rc" class="srerca>  ">release_sock(dh;
11a/dccp/proto.c#L724" id="L724" cla1115e=sk" c11s="sref">timeo;
kiocb *rcPkb"_cba>  = 818 815
11a/dccp/proto.c#L756" ioto.c#L804" id="L804FIELD_SIZEOFrc" class="srefFIELD_SIZEOFf="+cf">kiocb * 751     cp_qpolicy_pushrelease_sock(sk);
111/dccp/proto.c#L816" id="L816re=rc" class="srerca>  /776        (rcPorphai_count name="L751"> 7n>rcPorphai_countf">i, 0=">release_sock( 817
11a/dccp/proto.cd="L728" class="linre=rc" class="srerca>  =me="L797"> 797DCCP_LISTEN) {
DC>11a/dccp/proto.c#L729" id="L762" class="line" n_failline" name="L81" n_faila>  ">release_sock(ENOTCONN;
112edccp/proto.c#L804" id="L804"e=rc" class="srerca>  /77               release_sock( 8171121dccp/proto.c#L816" id="L816817t_hashinfo_inf=rc" class="sref817t_hashinfo_inf=f="+c_wait_connect(rcPhashinfo name="L751"> 7n>rcPhashinfoa>  =">release_sock(112/dccp/proto.c#L792" id="L792n>rcPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_pushcmsg))
    L771" id="L7#L7name>"n>rcPbind_bu   *"ine" nas>release_sock(EINVAL;
kiocb *release_sock( 724
112/dccp/proto.c#L685" ioto.c#L756" ioto.c#L804" id="L804SLAB_HWCACHE_ALIGte" class="sref"SLAB_HWCACHE_ALIGt    cp_qpolicy_pushrelease_sock(SOL_DCCP)
1126dccp/proto.cd="L8" id="L798" cla">rc 7n>rcPhashinfoa>  ._qpolicy_push 797112/dccp/proto.c#L737" id="L762" class="line" n_freespercpu name="L751"> 7" n_freespercpua>  ">release_sock( 727
112/dccp/proto.c#L688" id="L688" cla1129e=sk" c11_MAX &&
11s/dccp/proto.c#L793" id="L793" class="line" name="L793"> 793        <113de=sk" c11ef">cmsg_type))
113/dccp/proto.c#L770" id="L770" class=* Size andlall  ate> 793        <1131e=sk" c11="sref">EINVAL;
 731
113/dccp/proto.c#L712" id="L712" class=*      * network. Window-based CCIDs11e3e=sk" c11f">cmsg_type) {
>11e/dccp/proto.c#L713" id="L713" class=* Tsp methodology="cosimilarclas er cache       * network. Window-based CCIDs11e4e=sk" c11P_SCM_PRIORITY:
11e4dccp/proto.c#L713" id="L713" class=*line" name="L797"> 797__u32)))
113/dccp/proto.cd="L728" class="lintotalram_pagese=noblock" clastotalram_pagesdccp/818<= (12/=* 10s/)=me="L797"> 797EINVAL;
        release_sock(cmsg);
113/dccp/proto.c#L738" i#de=EXPORT_SYMBgoalline" name="L81goala>  /776                release_sock(11e/dccp/proto.c#L809" id="L809" cla114de=sk" c11="sref">EINVAL;
 797                }
 >114/dccp/proto.c#L761" id="L761" class=goalline" name="L81goala>  /77L728" class="linthash_enL7nede=noblock" clasthash_enL7ned/pro *me="L797"> 797 741        }
 >114/dccp/proto.c#L762" iiiiiiiiifizeofcf">kiocb *        release_sock(        return 0;
 >11=/dccp/proto.cfor L728" class="linehash_ord">ne" name="L819"ehash_ord">a>  a> id (1UL &l8<8l8< 6        ne" name="L819"ehash_ord">a>  ) 8l8< 6                ne" name="L819"ehash_ord">a>  ++=me="L797"> 797 743}
114/dccp/proto.c#L774" i">release_sock( 744
11=5dccp/proto.cdo msg,
114/dccp/proto.c#L756" iunaigned #L814" id="L814" clahash_fizene" name="L819"hash_fizea>  /77L1UL &l8<8l8< 6        ne" name="L819"ehash_ord">a>  ) * 6          //a href="+code=DCCP_LISTEN" c1147e=sk" c11ass="sref">len)
114/dccp/proto.c#L737" i/proto.c#L762" iiiiiiiiifizeofcf">kiocb * 747{
114/dccp/proto.c#L688" id="L688" cla1149e=sk" c11ass="sref">sk);
114/dccp/proto.c#L729" iwhile (" id="L814" clahash_fizene" name="L819"hash_fizea>  />->a(" id="L814" clahash_fizene" name="L819"hash_fizea>  /- 1)=me="L797"> 797msg_flags;
115ddccp/proto.c#L738" iiiiiiiii" id="L814" clahash_fizene" name="L819"hash_fizea>  --">release_sock(MSG_DONTWAIT;
M>115/dccp/proto.c#L761" id="L761" class=+>rc 7n>rcPhashinfoa>  ._qpolicy_push  /- 1">release_sock(skb;
115/dccp/proto.c#L762" i#L816" id="L816+>rc 7n>rcPhashinfoa>  ._qpolicy_push  /77Lf">kiocb * 797size;
115/dccp/proto.c#L733" i cla2" i#L816" id="L816__gen_freespagese=noblock" clas__gen_freespagesf="+code=EXPORT_SYMBGFP_ATOMIC"L722"> 722GFP_ATOMICf="+|#L816" id="L816__GFP_NOWARte" class="sref"__GFP_NOWARt    cp_qpolicy_pushne" name="L819"ehash_ord">a>  )">release_sock(timeo;
rc 7n>rcPhashinfoa>  ._qpolicy_push  />->>->a-               ne" name="L819"ehash_ord">a>  a818< 0=">release_sock( 754
115/dccp/proto.c#L815" id="L815" cla11r6e=sk" c11ccps_mss_cache)
1156dccp/proto.cd="L8" id="L798" cla">rc 7n>rcPhashinfoa>  ._qpolicy_push  = EMSGSIZE;
115/dccp/proto.c#L737" iode=EXPORT_SYMB" namCRITe=noblock" clas" namCRITa>    L771" id="L7#L7name>"Failedclasall  ate>" na ehreblish=dchash reble"ine" na=">release_sock( 757
115/dccp/proto.c#L738" id="L762" class="line" n_freesbind_bu   *_cacheding" class="sre" n_freesbind_bu   *_cacheds="s">release_sock(sk);
11r9dccp/proto.c}ef">lock_sock( 759
11amdccp/proto.c#L688" id="L688" cla1161e=sk" c11s="sref">sk)) {
 7n>rcPhashinfoa>  ._qpolicy_pushEAGAIN;
INIT_Htate_clasS_HEADf="+c_wait_connect(rcPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  [728" class="linia>ne" name="L818a>  ]._qpolicy_push  cp_qpolicy_pushne" name="L818a>  =">release_sock(out_release;
>11a/dccp/proto.c#L733" i#L816" id="L816INIT_Htate_clasS_HEAD" class="sref">INIT_Htate_clasS_HEADf="+c_wait_connect(rcPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  [728" class="linia>ne" name="L818a>  ]._qpolicy_push  cp_qpolicy_pushne" name="L818a>  =">release_sock( 763        }
 >1164dccp/proto.c}ef">lock_sock( 764
116/dccp/proto.c#L815" id="L815" cla1166e=sk" c11sref">noblock);
1166dccp/proto.cd="Lb * 7n>rcPhashinfoa>  ==me="L797"> 797 766
116/dccp/proto.c#L737" i/proto.cd="L762" class="line" n_freesn>rcPehashhref="+code=soc" n_freesn>rcPehashs="s">release_sock(/*
116/dccp/proto.c#L688" id="L688" cla1169e=sk" c11ite_pending,
1169dccp/proto.c#L816" id="L816bhash_ord">ne" name="L819"bhash_ord">a>  /776        ne" name="L819"ehash_ord">a>  ">release_sock(
117mdccp/proto.c#L688" id="L688" cla11a1e=sk" c11>         */
  >11a1dccp/proto.cdo 
117/dccp/proto.c#L762" i#L816" id="L816+>rc 7n>rcPhashinfoa>  ._qpolicy_push  /77L1UL &l8<8l8< 6        ne" name="L819"bhash_ord">a>  ) * 6          //a href="+code=DCCP_LISTEN" c1173e=sk" c11CCPF_PARTOPEN))
117/dccp/proto.c#L733" i cla2" iiiiiiiiiiiiiiiiifizeofcf">kiocb *release_sock(timeo)) != 0)
t>117/dccp/proto.c#L774" id="Lcode=EXPORT_SYMBOL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  /818< (64=* 10s/)=/>->>->>release_sock(out_release;
>117/dccp/proto.c#L685" ioto.#L816" id="L816bhash_ord">ne" name="L819"bhash_ord">a>  /818< 0=>release_sock( 775
117/dccp/proto.c#L756" ioto.cccccontinuet>release_sock(len;
117/dccp/proto.c#L737" iode=EXPORT_SYMBOL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  /77Lf">kiocb * 797sk);
117/dccp/proto.c#L738" i class="#L816" id="L816__gen_freespagese=noblock" clas__gen_freespagesf="+code=EXPORT_SYMBGFP_ATOMIC"L722"> 722GFP_ATOMICf="+|#L816" id="L816__GFP_NOWARte" class="sref"__GFP_NOWARt    cp_qpolicy_pushne" name="L819"bhash_ord">a>  )t>release_sock(rc);
1179dccp/proto.c}iwhile (8" id="L798" cla">rc 7n>rcPhashinfoa>  ._qpolicy_push  />->>->a-               ne" name="L819"bhash_ord">a>  /818<= 0=">release_sock(sk);
118mdccp/proto.c#L688" id="L688" cla1181e=sk" c11ss="sref">NULL)
1181dccp/proto.cd="L8" id="L798" cla">rc 7n>rcPhashinfoa>  ._qpolicy_push  = out_release;
>118/dccp/proto.c#L762" i#L816" id="L816" namCRITe=noblock" clas" namCRITa>    L771" id="L7#L7name>"Failedclasall  ate>" na bind hash reble"ine" na=">release_sock( 782
118/dccp/proto.c#L733" id="L762" class="line" n_freesn>rcP" clshref="+code=soc" n_freesn>rcP" clsa>  ">release_sock(max_header);
>1184dccp/proto.c}ef">lock_sock(len);
118/dccp/proto.c#L815" id="L815" cla1186e=sk" c11"sref">rc != 0)
118/dccp/proto.cfor L728" class="linia>ne" name="L818a>  a> id 728" class="linia>ne" name="L818a>  a8l8 7n>rcPhashinfoa>  ._qpolicy_push  d 728" class="linia>ne" name="L818a>  ++= out_discard;
>118/dccp/proto.c#L737" iode=EXPORT_SYMBspin_" clainf=rc" class="srefspin_" clainf=f="+c_wait_connect(rcPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  [728" class="linia>ne" name="L818a>  ]._qpolicy_pushi=">release_sock( 787
11a/dccp/proto.c#L738" i#L816" id="L816INIT_Htate_HEAD" class="sref">INIT_Htate_HEADf="+c_wait_connect(rcPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  [728" class="linia>ne" name="L818a>  ]._qpolicy_push  =">release_sock(skb);
1189dccp/proto.c}ef">lock_sock(rc != 0)
119mdccp/proto.c#L688" id="L688" cla1191e=sk" c11f">out_discard;
>1191dccp/proto.c#L816" id="L816re=rc" class="srerca>  /776        rcPmib_inf=rc" class="sref">rcPmib_inf=f="+c=">release_sock( 791
119/dccp/proto.c#="L728" class="linre=rc" class="srerca>  =me="L797"> 797skb);
119/dccp/proto.c#L733" id="L762" class="line" n_freesn>rcPbhashne" name="L819"" n_freesn>rcPbhasha>  ">release_sock(/*
119/dccp/proto.c#L724" id="L724" cla1195e=sk" c11 will expire
1195dccp/proto.c#L804" id="L804re=rc" class="srerca>  /776        rcPackvec_inf=rc" class="sref">rcPackvec_inf=f="+c=">release_sock(
1196dccp/proto.cd="Lb * 797
119/dccp/proto.c#L737" id="L762" class="line" n_frees">rcPmibne" name="L819"" n_freesn>rcPmibf="+">release_sock(         */
  >119/dccp/proto.c#L688" id="L688" cla1199e=sk" c11ps_xmit_timer))
1199dccp/proto.c#L816" id="L816re=rc" class="srerca>  /776        rcPsysctl_inf=rc" class="sref">rcPsysctl_inf=f="+c=">release_sock())
120"dccp/proto.cd="L728" class="linre=rc" class="srerca>  =me="L797"> 797out_discard;
>120/dccp/proto.c#L761" id="L762" class="line" n_ackvec_exf=rc" class="sref" n_ackvec_exf=f="+">release_sock( 791
120/dccp/proto.c#L782" id="L782" cla12o3e=sk" c12os="sref">skb);
120/dccp/proto.c#L783" id="L783re=rc" class="srerca>  /776        release_sock(/*
1204dccp/proto.cd="L728" class="linre=rc" class="srerca>  =me="L797"> 797
120/dccp/proto.c#L685" id="L762" class="line" n_sysctl_exf=rc" class="sref" n_sysctl_exf=f="+">release_sock(
120/dccp="L742" class="line" name="L12o7e=sk" c12othis timer.
120/dccp/proto.c#L816" id="L816">rcPss="stwainam_inf=rc" class="sref">rcPss="stwainam_inf=f="+c=">release_sock(
120/dccp/proto.c#L688" id="L688" cla12o9e=sk" c12os_xmit_timer))
1209dccp/proto.c#L802" 0">release_sock( 809
121mdccp/proto.c#L688" id="L688" cla12a1e=sk" c12ass="sref">msg,
1212e8">62" class="line" n_sysctl_exf=rc" class="sref" n_sysctl_exf=f="+" class="line" name="L738"> 712a2e=sk" c12sref">addr_len)
121/dccp/proto.c#L792" id="L792n>rcPsysctl_exf=rc" class="srefn>rcPsysctl_exf=f="+c=">release_sock( 812{
1213dccp              <" n_ackvec_exf=rc" class="sref" n_ackvec_exf=f="+" class="line" name="L738"> 712a4e=sk" c12lass="sref">dh;
121/dccp/proto.c#L804" id="L804">rcPackvec_exf=rc" class="srefn>rcPackvec_exf=f="+c=">release_sock(timeo;
rcPmibne" name="L819"" n_freesn>rcPmibf="+" class="line" name="L738"> 712a6e=sk" c12ame="L815"> 815
121/dccp/proto.c#L776" id="L776">rcPmib_exf=rc" class="sref">rcPmib_exf=f="+c=">release_sock(sk);
121/dccp62" class="line" n_freesn>rcPbhashne" name="L819"" n_freesn>rcPbhasha>  " class="line" name="L738"> 712a8e=sk" c12ame="L817"> 817
121/dccp/proto.c#L788" id="L788freespagese=noblock" clasfreespagesf="+c(unaigned #L81)ode=EXPORT_SYMBOL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  cp_qpolicy_pushne" name="L819"bhash_ord">a>  )t>release_sock(DCCP_LISTEN) {
DC>121/dccpef">skb_put" n_freesn>rcP" clshref="+code=soc" n_freesn>rcP" clsa>  " class="line" name="L738"> 7122de=sk" c12sref">ENOTCONN;
122edccp/proto.c#L804" id="L804817t_ehash_" cls_freerc" class="sref817t_ehash_" cls_freef="+c_wait_connect(rcPhashinfo name="L751"> 7n>rcPhashinfoa>  =t>release_sock( 8171222e8">62" class="line" n_freesn>rcPehashhref="+code=soc" n_freesn>rcPehashs="s" class="line" name="L738"> 71222e=sk" c12o.c#L727" id="L727" clas12o.c>122/dccp/proto.c#L792" id="L792freespagese=noblock" clasfreespagesf="+c(unaigned #L81)ode=EXPORT_SYMBOL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  cp_qpolicy_pushne" name="L819"ehash_ord">a>  )">release_sock(cmsg))
 71224e=sk" c12="sref">EINVAL;
 7n>rcPhashinfoa>  ._qpolicy_pushrelease_sock( 724
1225dccp62" class="line" n_freespercpu name="L751"> 7" n_freespercpua>  " class="line" name="L738"> 71226e=sk" c12sref">SOL_DCCP)
122/dccp/proto.c#L776" id="L776percpu_counter_desrsoying" class="srepercpu_counter_desrsoyf="+c_wait_connect(rcPorphai_count name="L751"> 7n>rcPorphai_countf">i=">release_sock(122/dccp62" class="line" n_failline" name="L81" n_faila>  " class="line" name="L738"> 71228e=sk" c12ame="L727"> 727
122/dccp/proto.c#L788" id="L788OL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  /77_qpolicy_pushrelease_sock( &&
1229dccp/proto.c#L816" id="L816OL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  /77_qpolicy_pushrelease_sock(cmsg_type))
123sdccp/proto.c#L783" id="L783OL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_pushrelease_sock(EINVAL;
release_sock( 731
123/dccp}ef">lock_sock(cmsg_type) {
>12e/dccpef">lock_sock(:
12e4dccphrefic void ode=EXPORT_SYMB__exf=rc" class="sref__exf=f="+c#L783" id="L783OL_GPf    name="L751"> 7n>rcPf   f="+cvoid=me="L797"> 797__u32)))
123/dccpEINVAL;
release_sock(cmsg);
rcPmib_exf=rc" class="sref">rcPmib_exf=f="+c=">release_sock(123/dccp/proto.c#L788" id="L788freespagese=noblock" clasfreespagesf="+c(unaigned #L81)ode=EXPORT_SYMBOL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  c>release_sock(123/dccp/proto.c#L729" ioto_qpolicy_pushne" name="L819"gen_ord">f="+code=EXPORT_SYMBOL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  /*me="L797"> 797EINVAL;
kiocb *release_sock(                }
 >1241dccp/proto.c#L816" id="L816freespagese=noblock" clasfreespagesf="+c(unaigned #L81)ode=EXPORT_SYMBOL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push  c>release_sock( 741        }
 >124/dccp/proto.c#L762" iiii_qpolicy_pushne" name="L819"gen_ord">f="+ccode=EXPORT_SYMBOL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_push 797        return 0;
 >124/dccp/proto.c#L733" i cla2" iiiiiifizeofcf">kiocb *release_sock( 743}
124/dccp/proto.c#L804" id="L804817t_ehash_" cls_freerc" class="sref817t_ehash_" cls_freef="+c_wait_connect(rcPhashinfo name="L751"> 7n>rcPhashinfoa>  =t>release_sock( 744
1245dccp/proto.c#L804" id="L804kmem_cache_desrsoying" class="srekmem_cache_desrsoyf="+code=EXPORT_SYMBOL_GPhashinfo name="L751"> 7n>rcPhashinfoa>  ._qpolicy_pushrelease_sock(msg,
124/dccp/proto.c#L776" id="L776">rcPackvec_exf=rc" class="srefn>rcPackvec_exf=f="+c=">release_sock(len)
124/dccp/proto.c#L816" id="L816">rcPsysctl_exf=rc" class="srefn>rcPsysctl_exf=f="+c=">release_sock( 747{
124/dccp/proto.c#L788" id="L788percpu_counter_desrsoying" class="srepercpu_counter_desrsoyf="+c_wait_connect(rcPorphai_count name="L751"> 7n>rcPorphai_countf">i=">release_sock(sk);
124/dccp}ef">lock_sock(msg_flags;
125mdccp/proto.c#L688" id="L688" cla12r1e=sk" c12">MSG_DONTWAIT;
M>1252e8">62" class="linemodule_inf=rc" class="srefmodule_inf=f="+code=EXPORT_SYMBOL_GPinf=rc" class="sref">rcPinf=f="+=">release_sock(skb;
125/dccp/2" class="linemodule_exf=rc" class="srefmodule_exf=f="+code=EXPORT_SYMBOL_GPf    name="L751"> 7n>rcPf   f="+=">release_sock(size;
125/dccpef">lock_sock(timeo;
 754
1255dccp62" class="lineMODULEEAUTHORe=noblock" clasMODULEEAUTHORf="+coL771" id="L7#L7name>"Arnaldo Carvalho de Meloa8l8)
125/dccp              EMSGSIZE;
125/dccp<


<
EMSGSfooter"> Tsp original LXR software by>LXR " idunf=ya> cpthis experid="Lal version by>release_smailto:lxr@IZEux.no">lxr@IZEux.noa> . <
EMSGSsubfooter"> lxr.IZEux.no kindly hostedcby>release_shttp://www.redpill-IZEa h.no">Redpill LZEa h ASa> cpa hvider of LZEuxcconsultingcandloperarions servicecosince 1995. <