!C99Shell v. 2.0 [PHP 7 Update] [25.02.2019]!

Software: nginx/1.23.4. PHP/5.6.40-65+ubuntu20.04.1+deb.sury.org+1 

uname -a: Linux foro-restaurado-2 5.15.0-1040-oracle #46-Ubuntu SMP Fri Jul 14 21:47:21 UTC 2023
aarch64
 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/usr/src/linux-oracle-5.13-headers-5.13.0-1018/include/linux/   drwxr-xr-x
Free 83.28 GB of 96.73 GB (86.1%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     virtio_net.h (4.85 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_VIRTIO_NET_H
#define _LINUX_VIRTIO_NET_H

#include <linux/if_vlan.h>
#include <uapi/linux/tcp.h>
#include <uapi/linux/udp.h>
#include <uapi/linux/virtio_net.h>

static inline int virtio_net_hdr_set_proto(struct sk_buff *skb,
                       const struct virtio_net_hdr *hdr)
{
    switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) {
    case VIRTIO_NET_HDR_GSO_TCPV4:
    case VIRTIO_NET_HDR_GSO_UDP:
        skb->protocol = cpu_to_be16(ETH_P_IP);
        break;
    case VIRTIO_NET_HDR_GSO_TCPV6:
        skb->protocol = cpu_to_be16(ETH_P_IPV6);
        break;
    default:
        return -EINVAL;
    }

    return 0;
}

static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,
                    const struct virtio_net_hdr *hdr,
                    bool little_endian)
{
    unsigned int gso_type = 0;
    unsigned int thlen = 0;
    unsigned int p_off = 0;
    unsigned int ip_proto;

    if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) {
        switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) {
        case VIRTIO_NET_HDR_GSO_TCPV4:
            gso_type = SKB_GSO_TCPV4;
            ip_proto = IPPROTO_TCP;
            thlen = sizeof(struct tcphdr);
            break;
        case VIRTIO_NET_HDR_GSO_TCPV6:
            gso_type = SKB_GSO_TCPV6;
            ip_proto = IPPROTO_TCP;
            thlen = sizeof(struct tcphdr);
            break;
        case VIRTIO_NET_HDR_GSO_UDP:
            gso_type = SKB_GSO_UDP;
            ip_proto = IPPROTO_UDP;
            thlen = sizeof(struct udphdr);
            break;
        default:
            return -EINVAL;
        }

        if (hdr->gso_type & VIRTIO_NET_HDR_GSO_ECN)
            gso_type |= SKB_GSO_TCP_ECN;

        if (hdr->gso_size == 0)
            return -EINVAL;
    }

    skb_reset_mac_header(skb);

    if (hdr->flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) {
        u32 start = __virtio16_to_cpu(little_endian, hdr->csum_start);
        u32 off = __virtio16_to_cpu(little_endian, hdr->csum_offset);
        u32 needed = start + max_t(u32, thlen, off + sizeof(__sum16));

        if (!pskb_may_pull(skb, needed))
            return -EINVAL;

        if (!skb_partial_csum_set(skb, start, off))
            return -EINVAL;

        p_off = skb_transport_offset(skb) + thlen;
        if (!pskb_may_pull(skb, p_off))
            return -EINVAL;
    } else {
        /* gso packets without NEEDS_CSUM do not set transport_offset.
         * probe and drop if does not match one of the above types.
         */
        if (gso_type && skb->network_header) {
            struct flow_keys_basic keys;

            if (!skb->protocol) {
                __be16 protocol = dev_parse_header_protocol(skb);

                virtio_net_hdr_set_proto(skb, hdr);
                if (protocol && protocol != skb->protocol)
                    return -EINVAL;
            }
retry:
            if (!skb_flow_dissect_flow_keys_basic(NULL, skb, &keys,
                                  NULL, 0, 0, 0,
                                  0)) {
                /* UFO does not specify ipv4 or 6: try both */
                if (gso_type & SKB_GSO_UDP &&
                    skb->protocol == htons(ETH_P_IP)) {
                    skb->protocol = htons(ETH_P_IPV6);
                    goto retry;
                }
                return -EINVAL;
            }

            p_off = keys.control.thoff + thlen;
            if (!pskb_may_pull(skb, p_off) ||
                keys.basic.ip_proto != ip_proto)
                return -EINVAL;

            skb_set_transport_header(skb, keys.control.thoff);
        } else if (gso_type) {
            p_off = thlen;
            if (!pskb_may_pull(skb, p_off))
                return -EINVAL;
        }
    }

    if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) {
        u16 gso_size = __virtio16_to_cpu(little_endian, hdr->gso_size);
        unsigned int nh_off = p_off;
        struct skb_shared_info *shinfo = skb_shinfo(skb);

        /* UFO may not include transport header in gso_size. */
        if (gso_type & SKB_GSO_UDP)
            nh_off -= thlen;

        /* Too small packets are not really GSO ones. */
        if (skb->len - nh_off > gso_size) {
            shinfo->gso_size = gso_size;
            shinfo->gso_type = gso_type;

            /* Header must be checked, and gso_segs computed. */
            shinfo->gso_type |= SKB_GSO_DODGY;
            shinfo->gso_segs = 0;
        }
    }

    return 0;
}

static inline int virtio_net_hdr_from_skb(const struct sk_buff *skb,
                      struct virtio_net_hdr *hdr,
                      bool little_endian,
                      bool has_data_valid,
                      int vlan_hlen)
{
    memset(hdr, 0, sizeof(*hdr));   /* no info leak */

    if (skb_is_gso(skb)) {
        struct skb_shared_info *sinfo = skb_shinfo(skb);

        /* This is a hint as to how much should be linear. */
        hdr->hdr_len = __cpu_to_virtio16(little_endian,
                         skb_headlen(skb));
        hdr->gso_size = __cpu_to_virtio16(little_endian,
                          sinfo->gso_size);
        if (sinfo->gso_type & SKB_GSO_TCPV4)
            hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
        else if (sinfo->gso_type & SKB_GSO_TCPV6)
            hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
        else
            return -EINVAL;
        if (sinfo->gso_type & SKB_GSO_TCP_ECN)
            hdr->gso_type |= VIRTIO_NET_HDR_GSO_ECN;
    } else
        hdr->gso_type = VIRTIO_NET_HDR_GSO_NONE;

    if (skb->ip_summed == CHECKSUM_PARTIAL) {
        hdr->flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
        hdr->csum_start = __cpu_to_virtio16(little_endian,
            skb_checksum_start_offset(skb) + vlan_hlen);
        hdr->csum_offset = __cpu_to_virtio16(little_endian,
                skb->csum_offset);
    } else if (has_data_valid &&
           skb->ip_summed == CHECKSUM_UNNECESSARY) {
        hdr->flags = VIRTIO_NET_HDR_F_DATA_VALID;
    } /* else everything is zero */

    return 0;
}

#endif /* _LINUX_VIRTIO_NET_H */

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.0 [PHP 7 Update] [25.02.2019] maintained by HackingTool | HackingTool | Generation time: 0.0051 ]--