mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
![Greg Kroah-Hartman](/assets/img/avatar_default.png)
Many source files in the tree are missing licensing information, which makes it harder for compliance tools to determine the correct license. By default all files without license information are under the default license of the kernel, which is GPL version 2. Update the files which contain no license information with the 'GPL-2.0' SPDX license identifier. The SPDX identifier is a legally binding shorthand, which can be used instead of the full boiler plate text. This patch is based on work done by Thomas Gleixner and Kate Stewart and Philippe Ombredanne. How this work was done: Patches were generated and checked against linux-4.14-rc6 for a subset of the use cases: - file had no licensing information it it. - file was a */uapi/* one with no licensing information in it, - file was a */uapi/* one with existing licensing information, Further patches will be generated in subsequent months to fix up cases where non-standard license headers were used, and references to license had to be inferred by heuristics based on keywords. The analysis to determine which SPDX License Identifier to be applied to a file was done in a spreadsheet of side by side results from of the output of two independent scanners (ScanCode & Windriver) producing SPDX tag:value files created by Philippe Ombredanne. Philippe prepared the base worksheet, and did an initial spot review of a few 1000 files. The 4.13 kernel was the starting point of the analysis with 60,537 files assessed. Kate Stewart did a file by file comparison of the scanner results in the spreadsheet to determine which SPDX license identifier(s) to be applied to the file. She confirmed any determination that was not immediately clear with lawyers working with the Linux Foundation. Criteria used to select files for SPDX license identifier tagging was: - Files considered eligible had to be source code files. - Make and config files were included as candidates if they contained >5 lines of source - File already had some variant of a license header in it (even if <5 lines). All documentation files were explicitly excluded. The following heuristics were used to determine which SPDX license identifiers to apply. - when both scanners couldn't find any license traces, file was considered to have no license information in it, and the top level COPYING file license applied. For non */uapi/* files that summary was: SPDX license identifier # files ---------------------------------------------------|------- GPL-2.0 11139 and resulted in the first patch in this series. If that file was a */uapi/* path one, it was "GPL-2.0 WITH Linux-syscall-note" otherwise it was "GPL-2.0". Results of that was: SPDX license identifier # files ---------------------------------------------------|------- GPL-2.0 WITH Linux-syscall-note 930 and resulted in the second patch in this series. - if a file had some form of licensing information in it, and was one of the */uapi/* ones, it was denoted with the Linux-syscall-note if any GPL family license was found in the file or had no licensing in it (per prior point). Results summary: SPDX license identifier # files ---------------------------------------------------|------ GPL-2.0 WITH Linux-syscall-note 270 GPL-2.0+ WITH Linux-syscall-note 169 ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) 21 ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) 17 LGPL-2.1+ WITH Linux-syscall-note 15 GPL-1.0+ WITH Linux-syscall-note 14 ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) 5 LGPL-2.0+ WITH Linux-syscall-note 4 LGPL-2.1 WITH Linux-syscall-note 3 ((GPL-2.0 WITH Linux-syscall-note) OR MIT) 3 ((GPL-2.0 WITH Linux-syscall-note) AND MIT) 1 and that resulted in the third patch in this series. - when the two scanners agreed on the detected license(s), that became the concluded license(s). - when there was disagreement between the two scanners (one detected a license but the other didn't, or they both detected different licenses) a manual inspection of the file occurred. - In most cases a manual inspection of the information in the file resulted in a clear resolution of the license that should apply (and which scanner probably needed to revisit its heuristics). - When it was not immediately clear, the license identifier was confirmed with lawyers working with the Linux Foundation. - If there was any question as to the appropriate license identifier, the file was flagged for further research and to be revisited later in time. In total, over 70 hours of logged manual review was done on the spreadsheet to determine the SPDX license identifiers to apply to the source files by Kate, Philippe, Thomas and, in some cases, confirmation by lawyers working with the Linux Foundation. Kate also obtained a third independent scan of the 4.13 code base from FOSSology, and compared selected files where the other two scanners disagreed against that SPDX file, to see if there was new insights. The Windriver scanner is based on an older version of FOSSology in part, so they are related. Thomas did random spot checks in about 500 files from the spreadsheets for the uapi headers and agreed with SPDX license identifier in the files he inspected. For the non-uapi files Thomas did random spot checks in about 15000 files. In initial set of patches against 4.14-rc6, 3 files were found to have copy/paste license identifier errors, and have been fixed to reflect the correct identifier. Additionally Philippe spent 10 hours this week doing a detailed manual inspection and review of the 12,461 patched files from the initial patch version early this week with: - a full scancode scan run, collecting the matched texts, detected license ids and scores - reviewing anything where there was a license detected (about 500+ files) to ensure that the applied SPDX license was correct - reviewing anything where there was no detection but the patch license was not GPL-2.0 WITH Linux-syscall-note to ensure that the applied SPDX license was correct This produced a worksheet with 20 files needing minor correction. This worksheet was then exported into 3 different .csv files for the different types of files to be modified. These .csv files were then reviewed by Greg. Thomas wrote a script to parse the csv files and add the proper SPDX tag to the file, in the format that the file expected. This script was further refined by Greg based on the output to detect more types of files automatically and to distinguish between header and source .c files (which need different comment types.) Finally Greg ran the script using the .csv files to generate the patches. Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
327 lines
7.4 KiB
C
327 lines
7.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* PPTP constants and structs */
|
|
#ifndef _NF_CONNTRACK_PPTP_H
|
|
#define _NF_CONNTRACK_PPTP_H
|
|
|
|
#include <linux/netfilter/nf_conntrack_common.h>
|
|
|
|
extern const char *const pptp_msg_name[];
|
|
|
|
/* state of the control session */
|
|
enum pptp_ctrlsess_state {
|
|
PPTP_SESSION_NONE, /* no session present */
|
|
PPTP_SESSION_ERROR, /* some session error */
|
|
PPTP_SESSION_STOPREQ, /* stop_sess request seen */
|
|
PPTP_SESSION_REQUESTED, /* start_sess request seen */
|
|
PPTP_SESSION_CONFIRMED, /* session established */
|
|
};
|
|
|
|
/* state of the call inside the control session */
|
|
enum pptp_ctrlcall_state {
|
|
PPTP_CALL_NONE,
|
|
PPTP_CALL_ERROR,
|
|
PPTP_CALL_OUT_REQ,
|
|
PPTP_CALL_OUT_CONF,
|
|
PPTP_CALL_IN_REQ,
|
|
PPTP_CALL_IN_REP,
|
|
PPTP_CALL_IN_CONF,
|
|
PPTP_CALL_CLEAR_REQ,
|
|
};
|
|
|
|
/* conntrack private data */
|
|
struct nf_ct_pptp_master {
|
|
enum pptp_ctrlsess_state sstate; /* session state */
|
|
enum pptp_ctrlcall_state cstate; /* call state */
|
|
__be16 pac_call_id; /* call id of PAC */
|
|
__be16 pns_call_id; /* call id of PNS */
|
|
|
|
/* in pre-2.6.11 this used to be per-expect. Now it is per-conntrack
|
|
* and therefore imposes a fixed limit on the number of maps */
|
|
struct nf_ct_gre_keymap *keymap[IP_CT_DIR_MAX];
|
|
};
|
|
|
|
struct nf_nat_pptp {
|
|
__be16 pns_call_id; /* NAT'ed PNS call id */
|
|
__be16 pac_call_id; /* NAT'ed PAC call id */
|
|
};
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#define PPTP_CONTROL_PORT 1723
|
|
|
|
#define PPTP_PACKET_CONTROL 1
|
|
#define PPTP_PACKET_MGMT 2
|
|
|
|
#define PPTP_MAGIC_COOKIE 0x1a2b3c4d
|
|
|
|
struct pptp_pkt_hdr {
|
|
__u16 packetLength;
|
|
__be16 packetType;
|
|
__be32 magicCookie;
|
|
};
|
|
|
|
/* PptpControlMessageType values */
|
|
#define PPTP_START_SESSION_REQUEST 1
|
|
#define PPTP_START_SESSION_REPLY 2
|
|
#define PPTP_STOP_SESSION_REQUEST 3
|
|
#define PPTP_STOP_SESSION_REPLY 4
|
|
#define PPTP_ECHO_REQUEST 5
|
|
#define PPTP_ECHO_REPLY 6
|
|
#define PPTP_OUT_CALL_REQUEST 7
|
|
#define PPTP_OUT_CALL_REPLY 8
|
|
#define PPTP_IN_CALL_REQUEST 9
|
|
#define PPTP_IN_CALL_REPLY 10
|
|
#define PPTP_IN_CALL_CONNECT 11
|
|
#define PPTP_CALL_CLEAR_REQUEST 12
|
|
#define PPTP_CALL_DISCONNECT_NOTIFY 13
|
|
#define PPTP_WAN_ERROR_NOTIFY 14
|
|
#define PPTP_SET_LINK_INFO 15
|
|
|
|
#define PPTP_MSG_MAX 15
|
|
|
|
/* PptpGeneralError values */
|
|
#define PPTP_ERROR_CODE_NONE 0
|
|
#define PPTP_NOT_CONNECTED 1
|
|
#define PPTP_BAD_FORMAT 2
|
|
#define PPTP_BAD_VALUE 3
|
|
#define PPTP_NO_RESOURCE 4
|
|
#define PPTP_BAD_CALLID 5
|
|
#define PPTP_REMOVE_DEVICE_ERROR 6
|
|
|
|
struct PptpControlHeader {
|
|
__be16 messageType;
|
|
__u16 reserved;
|
|
};
|
|
|
|
/* FramingCapability Bitmap Values */
|
|
#define PPTP_FRAME_CAP_ASYNC 0x1
|
|
#define PPTP_FRAME_CAP_SYNC 0x2
|
|
|
|
/* BearerCapability Bitmap Values */
|
|
#define PPTP_BEARER_CAP_ANALOG 0x1
|
|
#define PPTP_BEARER_CAP_DIGITAL 0x2
|
|
|
|
struct PptpStartSessionRequest {
|
|
__be16 protocolVersion;
|
|
__u16 reserved1;
|
|
__be32 framingCapability;
|
|
__be32 bearerCapability;
|
|
__be16 maxChannels;
|
|
__be16 firmwareRevision;
|
|
__u8 hostName[64];
|
|
__u8 vendorString[64];
|
|
};
|
|
|
|
/* PptpStartSessionResultCode Values */
|
|
#define PPTP_START_OK 1
|
|
#define PPTP_START_GENERAL_ERROR 2
|
|
#define PPTP_START_ALREADY_CONNECTED 3
|
|
#define PPTP_START_NOT_AUTHORIZED 4
|
|
#define PPTP_START_UNKNOWN_PROTOCOL 5
|
|
|
|
struct PptpStartSessionReply {
|
|
__be16 protocolVersion;
|
|
__u8 resultCode;
|
|
__u8 generalErrorCode;
|
|
__be32 framingCapability;
|
|
__be32 bearerCapability;
|
|
__be16 maxChannels;
|
|
__be16 firmwareRevision;
|
|
__u8 hostName[64];
|
|
__u8 vendorString[64];
|
|
};
|
|
|
|
/* PptpStopReasons */
|
|
#define PPTP_STOP_NONE 1
|
|
#define PPTP_STOP_PROTOCOL 2
|
|
#define PPTP_STOP_LOCAL_SHUTDOWN 3
|
|
|
|
struct PptpStopSessionRequest {
|
|
__u8 reason;
|
|
__u8 reserved1;
|
|
__u16 reserved2;
|
|
};
|
|
|
|
/* PptpStopSessionResultCode */
|
|
#define PPTP_STOP_OK 1
|
|
#define PPTP_STOP_GENERAL_ERROR 2
|
|
|
|
struct PptpStopSessionReply {
|
|
__u8 resultCode;
|
|
__u8 generalErrorCode;
|
|
__u16 reserved1;
|
|
};
|
|
|
|
struct PptpEchoRequest {
|
|
__be32 identNumber;
|
|
};
|
|
|
|
/* PptpEchoReplyResultCode */
|
|
#define PPTP_ECHO_OK 1
|
|
#define PPTP_ECHO_GENERAL_ERROR 2
|
|
|
|
struct PptpEchoReply {
|
|
__be32 identNumber;
|
|
__u8 resultCode;
|
|
__u8 generalErrorCode;
|
|
__u16 reserved;
|
|
};
|
|
|
|
/* PptpFramingType */
|
|
#define PPTP_ASYNC_FRAMING 1
|
|
#define PPTP_SYNC_FRAMING 2
|
|
#define PPTP_DONT_CARE_FRAMING 3
|
|
|
|
/* PptpCallBearerType */
|
|
#define PPTP_ANALOG_TYPE 1
|
|
#define PPTP_DIGITAL_TYPE 2
|
|
#define PPTP_DONT_CARE_BEARER_TYPE 3
|
|
|
|
struct PptpOutCallRequest {
|
|
__be16 callID;
|
|
__be16 callSerialNumber;
|
|
__be32 minBPS;
|
|
__be32 maxBPS;
|
|
__be32 bearerType;
|
|
__be32 framingType;
|
|
__be16 packetWindow;
|
|
__be16 packetProcDelay;
|
|
__be16 phoneNumberLength;
|
|
__u16 reserved1;
|
|
__u8 phoneNumber[64];
|
|
__u8 subAddress[64];
|
|
};
|
|
|
|
/* PptpCallResultCode */
|
|
#define PPTP_OUTCALL_CONNECT 1
|
|
#define PPTP_OUTCALL_GENERAL_ERROR 2
|
|
#define PPTP_OUTCALL_NO_CARRIER 3
|
|
#define PPTP_OUTCALL_BUSY 4
|
|
#define PPTP_OUTCALL_NO_DIAL_TONE 5
|
|
#define PPTP_OUTCALL_TIMEOUT 6
|
|
#define PPTP_OUTCALL_DONT_ACCEPT 7
|
|
|
|
struct PptpOutCallReply {
|
|
__be16 callID;
|
|
__be16 peersCallID;
|
|
__u8 resultCode;
|
|
__u8 generalErrorCode;
|
|
__be16 causeCode;
|
|
__be32 connectSpeed;
|
|
__be16 packetWindow;
|
|
__be16 packetProcDelay;
|
|
__be32 physChannelID;
|
|
};
|
|
|
|
struct PptpInCallRequest {
|
|
__be16 callID;
|
|
__be16 callSerialNumber;
|
|
__be32 callBearerType;
|
|
__be32 physChannelID;
|
|
__be16 dialedNumberLength;
|
|
__be16 dialingNumberLength;
|
|
__u8 dialedNumber[64];
|
|
__u8 dialingNumber[64];
|
|
__u8 subAddress[64];
|
|
};
|
|
|
|
/* PptpInCallResultCode */
|
|
#define PPTP_INCALL_ACCEPT 1
|
|
#define PPTP_INCALL_GENERAL_ERROR 2
|
|
#define PPTP_INCALL_DONT_ACCEPT 3
|
|
|
|
struct PptpInCallReply {
|
|
__be16 callID;
|
|
__be16 peersCallID;
|
|
__u8 resultCode;
|
|
__u8 generalErrorCode;
|
|
__be16 packetWindow;
|
|
__be16 packetProcDelay;
|
|
__u16 reserved;
|
|
};
|
|
|
|
struct PptpInCallConnected {
|
|
__be16 peersCallID;
|
|
__u16 reserved;
|
|
__be32 connectSpeed;
|
|
__be16 packetWindow;
|
|
__be16 packetProcDelay;
|
|
__be32 callFramingType;
|
|
};
|
|
|
|
struct PptpClearCallRequest {
|
|
__be16 callID;
|
|
__u16 reserved;
|
|
};
|
|
|
|
struct PptpCallDisconnectNotify {
|
|
__be16 callID;
|
|
__u8 resultCode;
|
|
__u8 generalErrorCode;
|
|
__be16 causeCode;
|
|
__u16 reserved;
|
|
__u8 callStatistics[128];
|
|
};
|
|
|
|
struct PptpWanErrorNotify {
|
|
__be16 peersCallID;
|
|
__u16 reserved;
|
|
__be32 crcErrors;
|
|
__be32 framingErrors;
|
|
__be32 hardwareOverRuns;
|
|
__be32 bufferOverRuns;
|
|
__be32 timeoutErrors;
|
|
__be32 alignmentErrors;
|
|
};
|
|
|
|
struct PptpSetLinkInfo {
|
|
__be16 peersCallID;
|
|
__u16 reserved;
|
|
__be32 sendAccm;
|
|
__be32 recvAccm;
|
|
};
|
|
|
|
union pptp_ctrl_union {
|
|
struct PptpStartSessionRequest sreq;
|
|
struct PptpStartSessionReply srep;
|
|
struct PptpStopSessionRequest streq;
|
|
struct PptpStopSessionReply strep;
|
|
struct PptpOutCallRequest ocreq;
|
|
struct PptpOutCallReply ocack;
|
|
struct PptpInCallRequest icreq;
|
|
struct PptpInCallReply icack;
|
|
struct PptpInCallConnected iccon;
|
|
struct PptpClearCallRequest clrreq;
|
|
struct PptpCallDisconnectNotify disc;
|
|
struct PptpWanErrorNotify wanerr;
|
|
struct PptpSetLinkInfo setlink;
|
|
};
|
|
|
|
/* crap needed for nf_conntrack_compat.h */
|
|
struct nf_conn;
|
|
struct nf_conntrack_expect;
|
|
|
|
extern int
|
|
(*nf_nat_pptp_hook_outbound)(struct sk_buff *skb,
|
|
struct nf_conn *ct, enum ip_conntrack_info ctinfo,
|
|
unsigned int protoff,
|
|
struct PptpControlHeader *ctlh,
|
|
union pptp_ctrl_union *pptpReq);
|
|
|
|
extern int
|
|
(*nf_nat_pptp_hook_inbound)(struct sk_buff *skb,
|
|
struct nf_conn *ct, enum ip_conntrack_info ctinfo,
|
|
unsigned int protoff,
|
|
struct PptpControlHeader *ctlh,
|
|
union pptp_ctrl_union *pptpReq);
|
|
|
|
extern void
|
|
(*nf_nat_pptp_hook_exp_gre)(struct nf_conntrack_expect *exp_orig,
|
|
struct nf_conntrack_expect *exp_reply);
|
|
|
|
extern void
|
|
(*nf_nat_pptp_hook_expectfn)(struct nf_conn *ct,
|
|
struct nf_conntrack_expect *exp);
|
|
|
|
#endif /* __KERNEL__ */
|
|
#endif /* _NF_CONNTRACK_PPTP_H */
|