* Re: [Linux-kernel-mentees][PATCH v2] packet: Fix undefined behavior in bit shift
From: Alexei Starovoitov @ 2019-06-27 17:05 UTC (permalink / raw)
To: Shuah Khan
Cc: David Miller, c0d1n61at3, linux-kernel-mentees,
Network Development, LKML
In-Reply-To: <9687ddc6-3bdb-5b2a-2934-ed9c6921551d@linuxfoundation.org>
On Thu, Jun 27, 2019 at 9:54 AM Shuah Khan <skhan@linuxfoundation.org> wrote:
>
> On 6/27/19 10:22 AM, David Miller wrote:
> > From: Shuah Khan <skhan@linuxfoundation.org>
> > Date: Wed, 26 Jun 2019 21:32:52 -0600
> >
> >> On 6/26/19 9:25 PM, Jiunn Chang wrote:
> >>> Shifting signed 32-bit value by 31 bits is undefined. Changing most
> >>> significant bit to unsigned.
> >>> Changes included in v2:
> >>> - use subsystem specific subject lines
> >>> - CC required mailing lists
> >>>
> >>
> >> These version change lines don't belong in the change log.
> >
> > For networking changes I actually like the change lines to be in the
> > commit log. So please don't stray people this way, thanks.
> >
>
> As a general rule, please don't include change lines in the commit log.
> For networking changes that get sent to David and netdev, as David
> points out here, he likes them in the commit log, please include them
> in the commit log.
>
> I am working on FAQ (Frequently Answered Questions) section for mentees.
> I will add this to it.
Same for bpf trees.
We prefer developers put as much as info as possible into commit logs
and cover letters.
Explanation of v1->v2->v3 differences is invaluable not only at
the point of code review, but in the future.
^ permalink raw reply
* Re: [PATCH net-next 12/16] mlxsw: spectrum: PTP: Support timestamping on Spectrum-1
From: David Miller @ 2019-06-27 17:04 UTC (permalink / raw)
To: idosch; +Cc: netdev, jiri, petrm, mlxsw, idosch
In-Reply-To: <20190627135259.7292-13-idosch@idosch.org>
From: Ido Schimmel <idosch@idosch.org>
Date: Thu, 27 Jun 2019 16:52:55 +0300
> + for (i = 0; i < num_rec; ++i) {
Please use the more canonical "i++" here, thank you.
^ permalink raw reply
* Re: [PATCH] net/smc: common release code for non-accepted sockets
From: David Miller @ 2019-06-27 17:03 UTC (permalink / raw)
To: kgraul; +Cc: netdev, linux-s390, gor, heiko.carstens, raspl, ubraun
In-Reply-To: <20190627130452.15408-1-kgraul@linux.ibm.com>
From: Karsten Graul <kgraul@linux.ibm.com>
Date: Thu, 27 Jun 2019 15:04:52 +0200
> From: Ursula Braun <ubraun@linux.ibm.com>
>
> There are common steps when releasing an accepted or unaccepted socket.
> Move this code into a common routine.
>
> Signed-off-by: Ursula Braun <ubraun@linux.ibm.com>
> Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Applied.
^ permalink raw reply
* Re: [PATCH bpf-next 1/4] bpf: unprivileged BPF access via /dev/bpf
From: Greg KH @ 2019-06-27 17:00 UTC (permalink / raw)
To: Song Liu
Cc: Daniel Borkmann, Networking, bpf, Alexei Starovoitov, Kernel Team,
jannh@google.com
In-Reply-To: <48E35F58-0DAD-40BA-993F-8AB76587A93B@fb.com>
On Thu, Jun 27, 2019 at 04:51:20PM +0000, Song Liu wrote:
>
>
> > On Jun 27, 2019, at 9:37 AM, Greg KH <gregkh@linuxfoundation.org> wrote:
> >
> > On Thu, Jun 27, 2019 at 01:00:03AM +0000, Song Liu wrote:
> >>
> >>
> >>> On Jun 26, 2019, at 5:08 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
> >>>
> >>> On Wed, Jun 26, 2019 at 03:17:47PM +0000, Song Liu wrote:
> >>>>>> +static struct miscdevice bpf_dev = {
> >>>>>> + .minor = MISC_DYNAMIC_MINOR,
> >>>>>> + .name = "bpf",
> >>>>>> + .fops = &bpf_chardev_ops,
> >>>>>> + .mode = 0440,
> >>>>>> + .nodename = "bpf",
> >>>>>
> >>>>> Here's what kvm does:
> >>>>>
> >>>>> static struct miscdevice kvm_dev = {
> >>>>> KVM_MINOR,
> >>>>> "kvm",
> >>>>> &kvm_chardev_ops,
> >>>>> };
> >>>
> >>> Ick, I thought we converted all of these to named initializers a long
> >>> time ago :)
> >>>
> >>>>> Is there an actual reason that mode is not 0 by default in bpf case? Why
> >>>>> we need to define nodename?
> >>>>
> >>>> Based on my understanding, mode of 0440 is what we want. If we leave it
> >>>> as 0, it will use default value of 0600. I guess we can just set it to
> >>>> 0440, as user space can change it later anyway.
> >>>
> >>> Don't rely on userspace changing it, set it to what you want the
> >>> permissions to be in the kernel here, otherwise you have to create a new
> >>> udev rule and get it merged into all of the distros. Just do it right
> >>> the first time and there is no need for it.
> >>>
> >>> What is wrong with 0600 for this? Why 0440?
> >>
> >> We would like root to own the device, and let users in a certain group
> >> to be able to open it. So 0440 is what we need.
> >
> > But you are doing a "write" ioctl here, right? So don't you really need
>
> By "write", you meant that we are modifying a bit in task_struct, right?
> In that sense, we probably need 0220?
You need some sort of write permission to modify something in the kernel :)
> > And why again is this an ioctl instead of a syscall? What is so magic
> > about the file descriptor here?
>
> We want to control the permission of this operation via this device.
> Users that can open the device would be able to run the ioctl. I think
> syscall cannot achieve control like this, unless we introduce something
> like CAP_BPF_ADMIN?
Ah, yeah, ick, no, don't go there...
And you can more easily "control" access to this device node from
containers as well. Ok, that makes sense to me.
thanks,
greg k-h
^ permalink raw reply
* Re: [Linux-kernel-mentees][PATCH v2] packet: Fix undefined behavior in bit shift
From: Jiunn Chang @ 2019-06-27 16:57 UTC (permalink / raw)
To: David Miller; +Cc: skhan, linux-kernel-mentees, netdev, linux-kernel
In-Reply-To: <20190627.092253.1878691006683087825.davem@davemloft.net>
On Thu, Jun 27, 2019 at 09:22:53AM -0700, David Miller wrote:
> From: Shuah Khan <skhan@linuxfoundation.org>
> Date: Wed, 26 Jun 2019 21:32:52 -0600
>
> > On 6/26/19 9:25 PM, Jiunn Chang wrote:
> >> Shifting signed 32-bit value by 31 bits is undefined. Changing most
> >> significant bit to unsigned.
> >> Changes included in v2:
> >> - use subsystem specific subject lines
> >> - CC required mailing lists
> >>
> >
> > These version change lines don't belong in the change log.
>
> For networking changes I actually like the change lines to be in the
> commit log. So please don't stray people this way, thanks.
Hello David,
Would you like me to send v3 with the change log in the patch description?
I would be happy to do that.
THX,
Jiunn
^ permalink raw reply
* Re: [PATCH bpf-next v9 05/10] bpf,landlock: Add a new map type: inode
From: Al Viro @ 2019-06-27 16:56 UTC (permalink / raw)
To: Mickaël Salaün
Cc: Mickaël Salaün, linux-kernel, Aleksa Sarai,
Alexei Starovoitov, Andrew Morton, Andy Lutomirski,
Arnaldo Carvalho de Melo, Casey Schaufler, Daniel Borkmann,
David Drysdale, David S . Miller, Eric W . Biederman,
James Morris, Jann Horn, John Johansen, Jonathan Corbet,
Kees Cook, Michael Kerrisk, Paul Moore, Sargun Dhillon,
Serge E . Hallyn, Shuah Khan, Stephen Smalley, Tejun Heo,
Tetsuo Handa, Thomas Graf, Tycho Andersen, Will Drewry,
kernel-hardening, linux-api, linux-fsdevel, linux-security-module,
netdev
In-Reply-To: <79bac827-4092-8a4d-9dc6-6019419b2486@ssi.gouv.fr>
On Thu, Jun 27, 2019 at 06:18:12PM +0200, Mickaël Salaün wrote:
> >> +/* called from syscall */
> >> +static int sys_inode_map_delete_elem(struct bpf_map *map, struct inode *key)
> >> +{
> >> + struct inode_array *array = container_of(map, struct inode_array, map);
> >> + struct inode *inode;
> >> + int i;
> >> +
> >> + WARN_ON_ONCE(!rcu_read_lock_held());
> >> + for (i = 0; i < array->map.max_entries; i++) {
> >> + if (array->elems[i].inode == key) {
> >> + inode = xchg(&array->elems[i].inode, NULL);
> >> + array->nb_entries--;
> >
> > Umm... Is that intended to be atomic in any sense?
>
> nb_entries is not used as a bound check but to avoid walking uselessly
> through the (pre-allocated) array when adding a new element, but I'll
> use an atomic to avoid inconsistencies anyway.
> > Wait a sec... So we have those beasties that can have long-term
> > references to arbitrary inodes stuck in them? What will happen
> > if you get umount(2) called while such a thing exists?
>
> I though an umount would be denied but no, we get a self-destructed busy
> inode and a bug!
> What about wrapping the inode's superblock->s_op->destroy_inode() to
> first remove the element from the map and then call the real
> destroy_inode(), if any?
What do you mean, _the_ map? I don't see anything to prevent insertion
of references to the same inode into any number of those...
> Or I could update fs/inode.c:destroy_inode() to call inode->free_inode()
> if it is set, and set it when such inode is referenced by a map?
> Or maybe I could hold the referencing file in the map and then wrap its
> f_op?
First of all, anything including the word "wrap" is a non-starter.
We really don't need the headache associated with the locking needed
to replace the method tables on the fly, or with the code checking that
->f_op points to given method table, etc. That's not going to fly,
especially since you'd end up _chaining_ those (again, the same reference
can go in more than once).
Nothing is allowed to change the method tables of live objects, period.
Once a struct file is opened, its ->f_op is never going to change and
it entirely belongs to the device driver or filesystem it resides on.
Nothing else (not VFS, not VM, not some LSM module, etc.) has any business
touching that. The same goes for inodes, dentries, etc.
What kind of behaviour do you want there? Do you want the inodes you've
referenced there to be forgotten on e.g. memory pressure? The thing is,
I don't see how "it's getting freed" could map onto any semantics that
might be useful for you - it looks like the wrong event for that.
^ permalink raw reply
* Re: [PATCH net-next 0/2] net: ipv4: fix circular-list infinite loop
From: David Miller @ 2019-06-27 16:54 UTC (permalink / raw)
To: fw; +Cc: netdev, ranro, tariqt
In-Reply-To: <20190627120333.12469-1-fw@strlen.de>
From: Florian Westphal <fw@strlen.de>
Date: Thu, 27 Jun 2019 14:03:31 +0200
> Tariq and Ran reported a regression caused by net-next commit
> 2638eb8b50cf ("net: ipv4: provide __rcu annotation for ifa_list").
>
> This happens when net.ipv4.conf.$dev.promote_secondaries sysctl is
> enabled -- we can arrange for ifa->next to point at ifa, so next
> process that tries to walk the list loops forever.
>
> Fix this and extend rtnetlink.sh with a small test case for this.
Series applied, thanks Florian.
^ permalink raw reply
* Re: [Linux-kernel-mentees][PATCH v2] packet: Fix undefined behavior in bit shift
From: Shuah Khan @ 2019-06-27 16:52 UTC (permalink / raw)
To: David Miller
Cc: c0d1n61at3, linux-kernel-mentees, netdev, linux-kernel,
Shuah Khan
In-Reply-To: <20190627.092253.1878691006683087825.davem@davemloft.net>
On 6/27/19 10:22 AM, David Miller wrote:
> From: Shuah Khan <skhan@linuxfoundation.org>
> Date: Wed, 26 Jun 2019 21:32:52 -0600
>
>> On 6/26/19 9:25 PM, Jiunn Chang wrote:
>>> Shifting signed 32-bit value by 31 bits is undefined. Changing most
>>> significant bit to unsigned.
>>> Changes included in v2:
>>> - use subsystem specific subject lines
>>> - CC required mailing lists
>>>
>>
>> These version change lines don't belong in the change log.
>
> For networking changes I actually like the change lines to be in the
> commit log. So please don't stray people this way, thanks.
>
As a general rule, please don't include change lines in the commit log.
For networking changes that get sent to David and netdev, as David
points out here, he likes them in the commit log, please include them
in the commit log.
I am working on FAQ (Frequently Answered Questions) section for mentees.
I will add this to it.
thanks,
-- Shuah
^ permalink raw reply
* Re: [PATCH bpf-next 1/4] bpf: unprivileged BPF access via /dev/bpf
From: Song Liu @ 2019-06-27 16:51 UTC (permalink / raw)
To: Greg KH
Cc: Daniel Borkmann, Networking, bpf, Alexei Starovoitov, Kernel Team,
jannh@google.com
In-Reply-To: <20190627163723.GA9643@kroah.com>
> On Jun 27, 2019, at 9:37 AM, Greg KH <gregkh@linuxfoundation.org> wrote:
>
> On Thu, Jun 27, 2019 at 01:00:03AM +0000, Song Liu wrote:
>>
>>
>>> On Jun 26, 2019, at 5:08 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
>>>
>>> On Wed, Jun 26, 2019 at 03:17:47PM +0000, Song Liu wrote:
>>>>>> +static struct miscdevice bpf_dev = {
>>>>>> + .minor = MISC_DYNAMIC_MINOR,
>>>>>> + .name = "bpf",
>>>>>> + .fops = &bpf_chardev_ops,
>>>>>> + .mode = 0440,
>>>>>> + .nodename = "bpf",
>>>>>
>>>>> Here's what kvm does:
>>>>>
>>>>> static struct miscdevice kvm_dev = {
>>>>> KVM_MINOR,
>>>>> "kvm",
>>>>> &kvm_chardev_ops,
>>>>> };
>>>
>>> Ick, I thought we converted all of these to named initializers a long
>>> time ago :)
>>>
>>>>> Is there an actual reason that mode is not 0 by default in bpf case? Why
>>>>> we need to define nodename?
>>>>
>>>> Based on my understanding, mode of 0440 is what we want. If we leave it
>>>> as 0, it will use default value of 0600. I guess we can just set it to
>>>> 0440, as user space can change it later anyway.
>>>
>>> Don't rely on userspace changing it, set it to what you want the
>>> permissions to be in the kernel here, otherwise you have to create a new
>>> udev rule and get it merged into all of the distros. Just do it right
>>> the first time and there is no need for it.
>>>
>>> What is wrong with 0600 for this? Why 0440?
>>
>> We would like root to own the device, and let users in a certain group
>> to be able to open it. So 0440 is what we need.
>
> But you are doing a "write" ioctl here, right? So don't you really need
By "write", you meant that we are modifying a bit in task_struct, right?
In that sense, we probably need 0220?
> 0660 at the least? And if you "know" the group id, I think you can
> specify it too so udev doesn't have to do a ton of work, but that only
> works for groups that all distros number the same.
I don't think we know the group id yet.
>
> And why again is this an ioctl instead of a syscall? What is so magic
> about the file descriptor here?
We want to control the permission of this operation via this device.
Users that can open the device would be able to run the ioctl. I think
syscall cannot achieve control like this, unless we introduce something
like CAP_BPF_ADMIN?
Thanks,
Song
^ permalink raw reply
* Re: [PATCH net-next 00/16] mlxsw: PTP timestamping support
From: Richard Cochran @ 2019-06-27 16:51 UTC (permalink / raw)
To: Ido Schimmel; +Cc: netdev, davem, jiri, petrm, mlxsw, Ido Schimmel
In-Reply-To: <20190627135259.7292-1-idosch@idosch.org>
On Thu, Jun 27, 2019 at 04:52:43PM +0300, Ido Schimmel wrote:
> From: Ido Schimmel <idosch@mellanox.com>
>
> This is the second patchset adding PTP support in mlxsw. Next patchset
> will add PTP shapers which are required to maintain accuracy under rates
> lower than 40Gb/s, while subsequent patchsets will add tracepoints and
> selftests.
Please add the PTP maintainer onto CC for PTP patch submissions.
Thanks,
Richard
^ permalink raw reply
* Re: [PATCH 06/10] batman-adv: mcast: collect softif listeners from IP lists instead
From: David Miller @ 2019-06-27 16:50 UTC (permalink / raw)
To: sw; +Cc: netdev, b.a.t.m.a.n, linus.luessing, sven
In-Reply-To: <20190627103938.7488-7-sw@simonwunderlich.de>
From: Simon Wunderlich <sw@simonwunderlich.de>
Date: Thu, 27 Jun 2019 12:39:34 +0200
> + in_dev = in_dev_get(dev);
> + if (!in_dev)
> + return 0;
Move this below the rcu_read_lock() and use __in_dev_get_rcu()
instead.
And then...
> +
> + rcu_read_lock();
...
> + rcu_read_unlock();
> + in_dev_put(in_dev);
You can drop this in_dev_put() as well.
> + in6_dev = in6_dev_get(dev);
> + if (!in6_dev)
> + return 0;
> +
> + read_lock_bh(&in6_dev->lock);
Similarly here you can use __in6_dev_get().
^ permalink raw reply
* [net/tls] Re: KMSAN: uninit-value in aesti_encrypt
From: Eric Biggers @ 2019-06-27 16:46 UTC (permalink / raw)
To: Boris Pismenny, Aviad Yehezkel, Dave Watson, John Fastabend,
Daniel Borkmann, netdev
Cc: davem, glider, herbert, linux-crypto, linux-kernel,
syzkaller-bugs, syzbot
In-Reply-To: <000000000000a97a15058c50c52e@google.com>
[+TLS maintainers]
Very likely a net/tls bug, not a crypto bug.
Possibly a duplicate of other reports such as "KMSAN: uninit-value in gf128mul_4k_lle (3)"
See https://lore.kernel.org/netdev/20190625055019.GD17703@sol.localdomain/ for
the list of 17 other open syzbot bugs I've assigned to the TLS subsystem. TLS
maintainers, when are you planning to look into these?
On Thu, Jun 27, 2019 at 09:37:05AM -0700, syzbot wrote:
> Hello,
>
> syzbot found the following crash on:
>
> HEAD commit: 3351e2b9 usb-fuzzer: main usb gadget fuzzer driver
> git tree: kmsan
> console output: https://syzkaller.appspot.com/x/log.txt?x=135d0c06a00000
> kernel config: https://syzkaller.appspot.com/x/.config?x=40511ad0c5945201
> dashboard link: https://syzkaller.appspot.com/bug?extid=6f50c99e8f6194bf363f
> compiler: clang version 9.0.0 (/home/glider/llvm/clang
> 80fee25776c2fb61e74c1ecb1a523375c2500b69)
> syz repro: https://syzkaller.appspot.com/x/repro.syz?x=1534241aa00000
>
> IMPORTANT: if you fix the bug, please add the following tag to the commit:
> Reported-by: syzbot+6f50c99e8f6194bf363f@syzkaller.appspotmail.com
>
> ==================================================================
> BUG: KMSAN: uninit-value in subshift crypto/aes_ti.c:148 [inline]
> BUG: KMSAN: uninit-value in aesti_encrypt+0x1238/0x1bc0 crypto/aes_ti.c:292
> CPU: 1 PID: 11187 Comm: syz-executor.2 Not tainted 5.2.0-rc4+ #5
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
> Google 01/01/2011
> Call Trace:
> __dump_stack lib/dump_stack.c:77 [inline]
> dump_stack+0x191/0x1f0 lib/dump_stack.c:113
> kmsan_report+0x162/0x2d0 mm/kmsan/kmsan.c:611
> __msan_warning+0x75/0xe0 mm/kmsan/kmsan_instr.c:304
> subshift crypto/aes_ti.c:148 [inline]
> aesti_encrypt+0x1238/0x1bc0 crypto/aes_ti.c:292
> crypto_cipher_encrypt_one include/linux/crypto.h:1753 [inline]
> crypto_cbcmac_digest_update+0x3cf/0x550 crypto/ccm.c:871
> crypto_shash_update crypto/shash.c:107 [inline]
> shash_ahash_finup+0x659/0xb20 crypto/shash.c:276
> shash_async_finup+0xbb/0x110 crypto/shash.c:291
> crypto_ahash_op+0x1cd/0x6e0 crypto/ahash.c:368
> crypto_ahash_finup+0x8c/0xb0 crypto/ahash.c:393
> crypto_ccm_auth+0x14b2/0x1570 crypto/ccm.c:230
> crypto_ccm_encrypt+0x272/0x8d0 crypto/ccm.c:309
> crypto_aead_encrypt include/crypto/aead.h:331 [inline]
> tls_do_encryption net/tls/tls_sw.c:521 [inline]
> tls_push_record+0x341a/0x4f70 net/tls/tls_sw.c:730
> bpf_exec_tx_verdict+0x1454/0x1c90 net/tls/tls_sw.c:770
> tls_sw_sendmsg+0x15bd/0x2740 net/tls/tls_sw.c:1033
> inet_sendmsg+0x48e/0x750 net/ipv4/af_inet.c:798
> sock_sendmsg_nosec net/socket.c:646 [inline]
> sock_sendmsg net/socket.c:665 [inline]
> __sys_sendto+0x905/0xb90 net/socket.c:1958
> __do_sys_sendto net/socket.c:1970 [inline]
> __se_sys_sendto+0x107/0x130 net/socket.c:1966
> __x64_sys_sendto+0x6e/0x90 net/socket.c:1966
> do_syscall_64+0xbc/0xf0 arch/x86/entry/common.c:302
> entry_SYSCALL_64_after_hwframe+0x63/0xe7
> RIP: 0033:0x4592c9
> Code: fd b7 fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 48 89 f8 48 89 f7
> 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff
> 0f 83 cb b7 fb ff c3 66 2e 0f 1f 84 00 00 00 00
> RSP: 002b:00007f01788fdc78 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
> RAX: ffffffffffffffda RBX: 0000000000000006 RCX: 00000000004592c9
> RDX: ffffffffffffff7f RSI: 00000000200005c0 RDI: 0000000000000003
> RBP: 000000000075c070 R08: 0000000000000000 R09: 0000000000000000
> R10: 0000000000000000 R11: 0000000000000246 R12: 00007f01788fe6d4
> R13: 00000000004c707f R14: 00000000004dc260 R15: 00000000ffffffff
>
> Uninit was stored to memory at:
> kmsan_save_stack_with_flags mm/kmsan/kmsan.c:201 [inline]
> kmsan_save_stack mm/kmsan/kmsan.c:213 [inline]
> kmsan_internal_chain_origin+0xcc/0x150 mm/kmsan/kmsan.c:414
> __msan_chain_origin+0x6b/0xe0 mm/kmsan/kmsan_instr.c:200
> __crypto_xor+0x1e8/0x1470 crypto/algapi.c:1019
> crypto_xor include/crypto/algapi.h:214 [inline]
> crypto_cbcmac_digest_update+0x2ba/0x550 crypto/ccm.c:865
> crypto_shash_update crypto/shash.c:107 [inline]
> shash_ahash_finup+0x659/0xb20 crypto/shash.c:276
> shash_async_finup+0xbb/0x110 crypto/shash.c:291
> crypto_ahash_op+0x1cd/0x6e0 crypto/ahash.c:368
> crypto_ahash_finup+0x8c/0xb0 crypto/ahash.c:393
> crypto_ccm_auth+0x14b2/0x1570 crypto/ccm.c:230
> crypto_ccm_encrypt+0x272/0x8d0 crypto/ccm.c:309
> crypto_aead_encrypt include/crypto/aead.h:331 [inline]
> tls_do_encryption net/tls/tls_sw.c:521 [inline]
> tls_push_record+0x341a/0x4f70 net/tls/tls_sw.c:730
> bpf_exec_tx_verdict+0x1454/0x1c90 net/tls/tls_sw.c:770
> tls_sw_sendmsg+0x15bd/0x2740 net/tls/tls_sw.c:1033
> inet_sendmsg+0x48e/0x750 net/ipv4/af_inet.c:798
> sock_sendmsg_nosec net/socket.c:646 [inline]
> sock_sendmsg net/socket.c:665 [inline]
> __sys_sendto+0x905/0xb90 net/socket.c:1958
> __do_sys_sendto net/socket.c:1970 [inline]
> __se_sys_sendto+0x107/0x130 net/socket.c:1966
> __x64_sys_sendto+0x6e/0x90 net/socket.c:1966
> do_syscall_64+0xbc/0xf0 arch/x86/entry/common.c:302
> entry_SYSCALL_64_after_hwframe+0x63/0xe7
>
> Uninit was created at:
> kmsan_save_stack_with_flags+0x37/0x70 mm/kmsan/kmsan.c:201
> kmsan_internal_alloc_meta_for_pages+0x123/0x510 mm/kmsan/kmsan_hooks.c:102
> kmsan_alloc_page+0x7a/0xf0 mm/kmsan/kmsan_hooks.c:246
> __alloc_pages_nodemask+0x144d/0x6020 mm/page_alloc.c:4700
> alloc_pages_current+0x6a0/0x9b0 mm/mempolicy.c:2132
> alloc_pages include/linux/gfp.h:511 [inline]
> skb_page_frag_refill+0x15e/0x560 net/core/sock.c:2349
> sk_page_frag_refill+0xa4/0x330 net/core/sock.c:2369
> sk_msg_alloc+0x203/0x1050 net/core/skmsg.c:37
> tls_alloc_encrypted_msg net/tls/tls_sw.c:284 [inline]
> tls_sw_sendmsg+0xb6a/0x2740 net/tls/tls_sw.c:953
> inet_sendmsg+0x48e/0x750 net/ipv4/af_inet.c:798
> sock_sendmsg_nosec net/socket.c:646 [inline]
> sock_sendmsg net/socket.c:665 [inline]
> __sys_sendto+0x905/0xb90 net/socket.c:1958
> __do_sys_sendto net/socket.c:1970 [inline]
> __se_sys_sendto+0x107/0x130 net/socket.c:1966
> __x64_sys_sendto+0x6e/0x90 net/socket.c:1966
> do_syscall_64+0xbc/0xf0 arch/x86/entry/common.c:302
> entry_SYSCALL_64_after_hwframe+0x63/0xe7
> ==================================================================
>
>
> ---
> This bug is generated by a bot. It may contain errors.
> See https://goo.gl/tpsmEJ for more information about syzbot.
> syzbot engineers can be reached at syzkaller@googlegroups.com.
>
> syzbot will keep track of this bug report. See:
> https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
> syzbot can test patches for this bug, for details see:
> https://goo.gl/tpsmEJ#testing-patches
>
> --
> You received this message because you are subscribed to the Google Groups "syzkaller-bugs" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to syzkaller-bugs+unsubscribe@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/syzkaller-bugs/000000000000a97a15058c50c52e%40google.com.
> For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply
* Re: [PATCH v2 0/4] Compile-test UAPI and kernel headers
From: Masahiro Yamada @ 2019-06-27 16:42 UTC (permalink / raw)
To: Jani Nikula
Cc: Linux Kbuild mailing list, Sam Ravnborg, Tony Luck,
open list:DOCUMENTATION, John Fastabend, Jonathan Corbet,
Jakub Kicinski, linux-riscv, Daniel Borkmann, xdp-newbies,
Anton Vorontsov, Palmer Dabbelt, Matthias Brugger, Song Liu,
Yonghong Song, Michal Marek, Jesper Dangaard Brouer,
Martin KaFai Lau, moderated list:ARM/Mediatek SoC support,
linux-arm-kernel, Albert Ou, Colin Cross, David S. Miller,
Kees Cook, Alexei Starovoitov, Networking,
Linux Kernel Mailing List, bpf
In-Reply-To: <87y31np89f.fsf@intel.com>
On Thu, Jun 27, 2019 at 8:36 PM Jani Nikula <jani.nikula@linux.intel.com> wrote:
>
> On Thu, 27 Jun 2019, Masahiro Yamada <yamada.masahiro@socionext.com> wrote:
> > 1/4: reworked v2.
> >
> > 2/4: fix a flaw I noticed when I was working on this series
> >
> > 3/4: maybe useful for 4/4 and in some other places
> >
> > 4/4: v2. compile as many headers as possible.
> >
> >
> > Changes in v2:
> > - Add CONFIG_CPU_{BIG,LITTLE}_ENDIAN guard to avoid build error
> > - Use 'header-test-' instead of 'no-header-test'
> > - Avoid weird 'find' warning when cleaning
> > - New patch
> > - New patch
> > - Add everything to test coverage, and exclude broken ones
> > - Rename 'Makefile' to 'Kbuild'
> > - Add CONFIG_KERNEL_HEADER_TEST option
> >
> > Masahiro Yamada (4):
> > kbuild: compile-test UAPI headers to ensure they are self-contained
> > kbuild: do not create wrappers for header-test-y
> > kbuild: support header-test-pattern-y
> > kbuild: compile-test kernel headers to ensure they are self-contained
>
> [responding here because I didn't receive the actual patch]
>
> This looks like it's doing what it's supposed to, but I ran into a bunch
> of build fails with CONFIG_OF=n. Sent a fix to one [1], but stopped at
> the next. Looks like you'll have to exclude more. And I'm pretty sure
> we'll uncover more configurations where this will fail.
Thanks for testing.
I did more compile-tests, and excluded more headers in v3.
Thanks.
--
Best Regards
Masahiro Yamada
^ permalink raw reply
* [PATCH v3 4/4] kbuild: compile-test kernel headers to ensure they are self-contained
From: Masahiro Yamada @ 2019-06-27 16:39 UTC (permalink / raw)
To: linux-kbuild
Cc: Jani Nikula, Sam Ravnborg, Masahiro Yamada, Tony Luck,
John Fastabend, Jakub Kicinski, Daniel Borkmann, xdp-newbies,
Anton Vorontsov, Matthias Brugger, Song Liu, Yonghong Song,
Michal Marek, Jesper Dangaard Brouer, Martin KaFai Lau,
linux-mediatek, linux-arm-kernel, Colin Cross, David S. Miller,
Kees Cook, Alexei Starovoitov, netdev, linux-kernel, bpf
In-Reply-To: <20190627163903.28398-1-yamada.masahiro@socionext.com>
The headers in include/ are globally used in the kernel source tree
to provide common APIs. They are included from external modules, too.
It will be useful to make as many headers self-contained as possible
so that we do not have to rely on a specific include order.
There are more than 4000 headers in include/. In my rough analysis,
70% of them are already self-contained. With efforts, most of them
can be self-contained.
For now, we must exclude more than 1000 headers just because they
cannot be compiled as standalone units. I added them to header-test-.
The black list was mostly generated by a script, so should be checked
later.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Jani Nikula <jani.nikula@intel.com>
---
Changes in v3:
- Exclude more headers
(Tested for allnoconfig + CONFIG_HEADER_TEST=y)
Changes in v2:
- Add everything to test coverage, and exclude broken ones
- Rename 'Makefile' to 'Kbuild'
- Add CONFIG_KERNEL_HEADER_TEST option
Makefile | 1 +
include/Kbuild | 1250 ++++++++++++++++++++++++++++++++++++++++++++++++
init/Kconfig | 11 +
3 files changed, 1262 insertions(+)
create mode 100644 include/Kbuild
diff --git a/Makefile b/Makefile
index 7f293b0431fe..1028f270167d 100644
--- a/Makefile
+++ b/Makefile
@@ -611,6 +611,7 @@ drivers-y := drivers/ sound/
drivers-$(CONFIG_SAMPLES) += samples/
net-y := net/
libs-y := lib/
+libs-$(CONFIG_KERNEL_HEADER_TEST) += include/
core-y := usr/
virt-y := virt/
endif # KBUILD_EXTMOD
diff --git a/include/Kbuild b/include/Kbuild
new file mode 100644
index 000000000000..462255eb18d9
--- /dev/null
+++ b/include/Kbuild
@@ -0,0 +1,1250 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+# The following are excluded for now because they fail to build.
+#
+# Do not add a new header to the list without legitimate reason.
+# Please consider to fix the header first.
+#
+# Sorted alphabetically.
+header-test- += acpi/acbuffer.h
+header-test- += acpi/acpi_bus.h
+header-test- += acpi/acpi_drivers.h
+header-test- += acpi/acpi.h
+header-test- += acpi/acpi_io.h
+header-test- += acpi/acpi_lpat.h
+header-test- += acpi/acpiosxf.h
+header-test- += acpi/acpixf.h
+header-test- += acpi/acrestyp.h
+header-test- += acpi/actbl1.h
+header-test- += acpi/actbl2.h
+header-test- += acpi/actbl3.h
+header-test- += acpi/actbl.h
+header-test- += acpi/actypes.h
+header-test- += acpi/battery.h
+header-test- += acpi/cppc_acpi.h
+header-test- += acpi/nfit.h
+header-test- += acpi/platform/acenvex.h
+header-test- += acpi/platform/acenv.h
+header-test- += acpi/platform/acintel.h
+header-test- += acpi/platform/aclinuxex.h
+header-test- += acpi/platform/aclinux.h
+header-test- += acpi/processor.h
+header-test- += clocksource/timer-sp804.h
+header-test- += crypto/cast_common.h
+header-test- += crypto/internal/cryptouser.h
+header-test- += crypto/pkcs7.h
+header-test- += crypto/poly1305.h
+header-test- += crypto/sha3.h
+header-test- += drm/ati_pcigart.h
+header-test- += drm/bridge/dw_hdmi.h
+header-test- += drm/bridge/dw_mipi_dsi.h
+header-test- += drm/drm_audio_component.h
+header-test- += drm/drm_auth.h
+header-test- += drm/drm_debugfs_crc.h
+header-test- += drm/drm_debugfs.h
+header-test- += drm/drm_displayid.h
+header-test- += drm/drm_encoder_slave.h
+header-test- += drm/drm_fb_cma_helper.h
+header-test- += drm/drm_fixed.h
+header-test- += drm/drm_format_helper.h
+header-test- += drm/drm_lease.h
+header-test- += drm/drm_legacy.h
+header-test- += drm/drm_panel.h
+header-test- += drm/drm_plane_helper.h
+header-test- += drm/drm_rect.h
+header-test- += drm/i915_component.h
+header-test- += drm/intel-gtt.h
+header-test- += drm/tinydrm/tinydrm-helpers.h
+header-test- += drm/ttm/ttm_debug.h
+header-test- += keys/asymmetric-parser.h
+header-test- += keys/asymmetric-subtype.h
+header-test- += keys/asymmetric-type.h
+header-test- += keys/big_key-type.h
+header-test- += keys/request_key_auth-type.h
+header-test- += keys/trusted.h
+header-test- += kvm/arm_arch_timer.h
+header-test- += kvm/arm_pmu.h
+header-test-$(CONFIG_ARM) += kvm/arm_psci.h
+header-test-$(CONFIG_ARM64) += kvm/arm_psci.h
+header-test- += kvm/arm_vgic.h
+header-test- += linux/8250_pci.h
+header-test- += linux/adxl.h
+header-test- += linux/agpgart.h
+header-test- += linux/alcor_pci.h
+header-test- += linux/amba/clcd.h
+header-test- += linux/amba/pl080.h
+header-test- += linux/amd-iommu.h
+header-test- += linux/a.out.h
+header-test-$(CONFIG_ARM) += linux/arm-cci.h
+header-test-$(CONFIG_ARM64) += linux/arm-cci.h
+header-test- += linux/arm_sdei.h
+header-test- += linux/asn1_decoder.h
+header-test- += linux/ata_platform.h
+header-test- += linux/ath9k_platform.h
+header-test- += linux/atm_tcp.h
+header-test- += linux/atomic-fallback.h
+header-test- += linux/avf/virtchnl.h
+header-test- += linux/bcm47xx_sprom.h
+header-test- += linux/bcma/bcma_driver_gmac_cmn.h
+header-test- += linux/bcma/bcma_driver_mips.h
+header-test- += linux/bcma/bcma_driver_pcie2.h
+header-test- += linux/bcma/bcma_driver_pci.h
+header-test- += linux/bit_spinlock.h
+header-test- += linux/blk-mq.h
+header-test- += linux/blk-mq-rdma.h
+header-test- += linux/blktrace_api.h
+header-test- += linux/blockgroup_lock.h
+header-test- += linux/bma150.h
+header-test- += linux/bpf_lirc.h
+header-test- += linux/bpf_types.h
+header-test- += linux/bsg.h
+header-test- += linux/bsg-lib.h
+header-test- += linux/btf.h
+header-test- += linux/btree-128.h
+header-test- += linux/btree-type.h
+header-test-$(CONFIG_CPU_BIG_ENDIAN) += linux/byteorder/big_endian.h
+header-test- += linux/byteorder/generic.h
+header-test-$(CONFIG_CPU_LITTLE_ENDIAN) += linux/byteorder/little_endian.h
+header-test- += linux/c2port.h
+header-test- += linux/can/dev/peak_canfd.h
+header-test- += linux/can/platform/cc770.h
+header-test- += linux/can/platform/sja1000.h
+header-test- += linux/ceph/ceph_features.h
+header-test- += linux/ceph/ceph_frag.h
+header-test- += linux/ceph/ceph_fs.h
+header-test- += linux/ceph/debugfs.h
+header-test- += linux/ceph/msgr.h
+header-test- += linux/ceph/rados.h
+header-test- += linux/cgroup_subsys.h
+header-test- += linux/clk/sunxi-ng.h
+header-test- += linux/clk/ti.h
+header-test- += linux/cn_proc.h
+header-test- += linux/coda_psdev.h
+header-test- += linux/compaction.h
+header-test- += linux/console_struct.h
+header-test- += linux/count_zeros.h
+header-test- += linux/cs5535.h
+header-test- += linux/cuda.h
+header-test- += linux/cyclades.h
+header-test- += linux/dcookies.h
+header-test- += linux/delayacct.h
+header-test- += linux/delayed_call.h
+header-test- += linux/device-mapper.h
+header-test- += linux/devpts_fs.h
+header-test- += linux/dio.h
+header-test- += linux/dirent.h
+header-test- += linux/dlm_plock.h
+header-test- += linux/dm-dirty-log.h
+header-test- += linux/dm-region-hash.h
+header-test- += linux/dma-debug.h
+header-test- += linux/dma/mmp-pdma.h
+header-test- += linux/dma/sprd-dma.h
+header-test- += linux/dns_resolver.h
+header-test- += linux/drbd_genl_api.h
+header-test- += linux/drbd_genl.h
+header-test- += linux/dw_apb_timer.h
+header-test- += linux/dynamic_debug.h
+header-test- += linux/dynamic_queue_limits.h
+header-test- += linux/ecryptfs.h
+header-test- += linux/edma.h
+header-test- += linux/eeprom_93cx6.h
+header-test- += linux/efs_vh.h
+header-test- += linux/elevator.h
+header-test- += linux/elfcore-compat.h
+header-test- += linux/error-injection.h
+header-test- += linux/errseq.h
+header-test- += linux/eventpoll.h
+header-test- += linux/ext2_fs.h
+header-test- += linux/f75375s.h
+header-test- += linux/falloc.h
+header-test- += linux/fault-inject.h
+header-test- += linux/fbcon.h
+header-test- += linux/firmware/intel/stratix10-svc-client.h
+header-test- += linux/firmware/meson/meson_sm.h
+header-test- += linux/firmware/trusted_foundations.h
+header-test- += linux/firmware/xlnx-zynqmp.h
+header-test- += linux/fixp-arith.h
+header-test- += linux/flat.h
+header-test- += linux/fsi-occ.h
+header-test- += linux/fsi-sbefifo.h
+header-test- += linux/fsl/bestcomm/ata.h
+header-test- += linux/fsl/bestcomm/bestcomm.h
+header-test- += linux/fsl/bestcomm/bestcomm_priv.h
+header-test- += linux/fsl/bestcomm/fec.h
+header-test- += linux/fsl/bestcomm/gen_bd.h
+header-test- += linux/fsl/bestcomm/sram.h
+header-test- += linux/fsldma.h
+header-test- += linux/fsl_hypervisor.h
+header-test- += linux/fs_types.h
+header-test- += linux/fs_uart_pd.h
+header-test- += linux/ftrace_irq.h
+header-test- += linux/genl_magic_func.h
+header-test- += linux/genl_magic_struct.h
+header-test- += linux/gpio/aspeed.h
+header-test- += linux/gpio/gpio-reg.h
+header-test- += linux/hid-debug.h
+header-test- += linux/hiddev.h
+header-test- += linux/hippidevice.h
+header-test- += linux/hmm.h
+header-test- += linux/hp_sdc.h
+header-test- += linux/huge_mm.h
+header-test- += linux/hugetlb_cgroup.h
+header-test- += linux/hugetlb_inline.h
+header-test- += linux/hwmon-vid.h
+header-test- += linux/i2c-algo-pca.h
+header-test- += linux/i2c-algo-pcf.h
+header-test- += linux/i3c/ccc.h
+header-test- += linux/i3c/device.h
+header-test- += linux/i3c/master.h
+header-test- += linux/i8042.h
+header-test- += linux/ide.h
+header-test- += linux/idle_inject.h
+header-test- += linux/if_frad.h
+header-test- += linux/if_rmnet.h
+header-test- += linux/if_tap.h
+header-test- += linux/iio/accel/kxcjk_1013.h
+header-test- += linux/iio/adc/ad_sigma_delta.h
+header-test- += linux/iio/buffer-dma.h
+header-test- += linux/iio/buffer_impl.h
+header-test- += linux/iio/common/st_sensors.h
+header-test- += linux/iio/common/st_sensors_i2c.h
+header-test- += linux/iio/common/st_sensors_spi.h
+header-test- += linux/iio/dac/ad5421.h
+header-test- += linux/iio/dac/ad5504.h
+header-test- += linux/iio/dac/ad5791.h
+header-test- += linux/iio/dac/max517.h
+header-test- += linux/iio/dac/mcp4725.h
+header-test- += linux/iio/frequency/ad9523.h
+header-test- += linux/iio/frequency/adf4350.h
+header-test- += linux/iio/hw-consumer.h
+header-test- += linux/iio/imu/adis.h
+header-test- += linux/iio/sysfs.h
+header-test- += linux/iio/timer/stm32-timer-trigger.h
+header-test- += linux/iio/triggered_event.h
+header-test- += linux/iio/trigger.h
+header-test- += linux/imx-media.h
+header-test- += linux/inet_diag.h
+header-test- += linux/init_ohci1394_dma.h
+header-test- += linux/initrd.h
+header-test- += linux/input/adp5589.h
+header-test- += linux/input/bu21013.h
+header-test- += linux/input/cma3000.h
+header-test- += linux/input/kxtj9.h
+header-test- += linux/input/lm8333.h
+header-test- += linux/input/sparse-keymap.h
+header-test- += linux/input/touchscreen.h
+header-test- += linux/input/tps6507x-ts.h
+header-test-$(CONFIG_X86) += linux/intel-iommu.h
+header-test- += linux/intel-ish-client-if.h
+header-test- += linux/intel-pti.h
+header-test- += linux/intel-svm.h
+header-test- += linux/interconnect-provider.h
+header-test- += linux/ioc3.h
+header-test- += linux/ipack.h
+header-test- += linux/irqchip/arm-gic-v3.h
+header-test- += linux/irqchip/arm-gic-v4.h
+header-test- += linux/irqchip/irq-madera.h
+header-test- += linux/irqchip/irq-sa11x0.h
+header-test- += linux/irqchip/mxs.h
+header-test- += linux/irqchip/versatile-fpga.h
+header-test- += linux/irq_cpustat.h
+header-test- += linux/irqdesc.h
+header-test- += linux/irqflags.h
+header-test- += linux/irq_poll.h
+header-test- += linux/iscsi_boot_sysfs.h
+header-test- += linux/isdn/capiutil.h
+header-test- += linux/isdn/hdlc.h
+header-test- += linux/isdn_ppp.h
+header-test- += linux/jbd2.h
+header-test- += linux/jz4740-adc.h
+header-test- += linux/kasan.h
+header-test- += linux/kcore.h
+header-test- += linux/kdev_t.h
+header-test- += linux/kernelcapi.h
+header-test- += linux/khugepaged.h
+header-test- += linux/kobject_ns.h
+header-test- += linux/kobj_map.h
+header-test- += linux/kvm_host.h
+header-test- += linux/kvm_irqfd.h
+header-test- += linux/kvm_para.h
+header-test- += linux/lantiq.h
+header-test- += linux/lapb.h
+header-test- += linux/latencytop.h
+header-test- += linux/led-lm3530.h
+header-test- += linux/leds-bd2802.h
+header-test- += linux/leds-lp3944.h
+header-test- += linux/leds-lp3952.h
+header-test- += linux/leds_pwm.h
+header-test- += linux/libata.h
+header-test- += linux/license.h
+header-test- += linux/lightnvm.h
+header-test- += linux/lis3lv02d.h
+header-test- += linux/list_bl.h
+header-test- += linux/list_lru.h
+header-test- += linux/list_nulls.h
+header-test- += linux/lockd/share.h
+header-test- += linux/lzo.h
+header-test- += linux/mailbox/zynqmp-ipi-message.h
+header-test- += linux/maple.h
+header-test- += linux/mbcache.h
+header-test- += linux/mbus.h
+header-test- += linux/mc146818rtc.h
+header-test- += linux/mc6821.h
+header-test- += linux/mdev.h
+header-test- += linux/mem_encrypt.h
+header-test- += linux/memfd.h
+header-test- += linux/mfd/88pm80x.h
+header-test- += linux/mfd/88pm860x.h
+header-test- += linux/mfd/abx500/ab8500-bm.h
+header-test- += linux/mfd/abx500/ab8500-gpadc.h
+header-test- += linux/mfd/adp5520.h
+header-test- += linux/mfd/arizona/pdata.h
+header-test- += linux/mfd/as3711.h
+header-test- += linux/mfd/as3722.h
+header-test- += linux/mfd/cros_ec_commands.h
+header-test- += linux/mfd/da903x.h
+header-test- += linux/mfd/da9055/pdata.h
+header-test- += linux/mfd/da9063/pdata.h
+header-test- += linux/mfd/db8500-prcmu.h
+header-test- += linux/mfd/dbx500-prcmu.h
+header-test- += linux/mfd/dln2.h
+header-test- += linux/mfd/dm355evm_msp.h
+header-test- += linux/mfd/ds1wm.h
+header-test- += linux/mfd/ezx-pcap.h
+header-test- += linux/mfd/intel_msic.h
+header-test- += linux/mfd/janz.h
+header-test- += linux/mfd/kempld.h
+header-test- += linux/mfd/lm3533.h
+header-test- += linux/mfd/lp8788-isink.h
+header-test- += linux/mfd/lpc_ich.h
+header-test- += linux/mfd/max77693.h
+header-test- += linux/mfd/max8998-private.h
+header-test- += linux/mfd/menelaus.h
+header-test- += linux/mfd/mt6397/core.h
+header-test- += linux/mfd/palmas.h
+header-test- += linux/mfd/pcf50633/backlight.h
+header-test- += linux/mfd/rc5t583.h
+header-test- += linux/mfd/retu.h
+header-test- += linux/mfd/samsung/core.h
+header-test- += linux/mfd/si476x-platform.h
+header-test- += linux/mfd/si476x-reports.h
+header-test- += linux/mfd/sky81452.h
+header-test- += linux/mfd/smsc.h
+header-test- += linux/mfd/sta2x11-mfd.h
+header-test- += linux/mfd/stmfx.h
+header-test- += linux/mfd/tc3589x.h
+header-test- += linux/mfd/tc6387xb.h
+header-test- += linux/mfd/tc6393xb.h
+header-test- += linux/mfd/tps65090.h
+header-test- += linux/mfd/tps6586x.h
+header-test- += linux/mfd/tps65910.h
+header-test- += linux/mfd/tps80031.h
+header-test- += linux/mfd/ucb1x00.h
+header-test- += linux/mfd/viperboard.h
+header-test- += linux/mfd/wm831x/core.h
+header-test- += linux/mfd/wm831x/otp.h
+header-test- += linux/mfd/wm831x/pdata.h
+header-test- += linux/mfd/wm8994/core.h
+header-test- += linux/mfd/wm8994/pdata.h
+header-test- += linux/mlx4/doorbell.h
+header-test- += linux/mlx4/srq.h
+header-test- += linux/mlx5/doorbell.h
+header-test- += linux/mlx5/eq.h
+header-test- += linux/mlx5/fs_helpers.h
+header-test- += linux/mlx5/mlx5_ifc_fpga.h
+header-test- += linux/mlx5/mlx5_ifc.h
+header-test- += linux/mm-arch-hooks.h
+header-test- += linux/mm_inline.h
+header-test- += linux/mmu_context.h
+header-test- += linux/mpage.h
+header-test- += linux/mtd/bbm.h
+header-test- += linux/mtd/cfi.h
+header-test- += linux/mtd/doc2000.h
+header-test- += linux/mtd/flashchip.h
+header-test- += linux/mtd/ftl.h
+header-test- += linux/mtd/gen_probe.h
+header-test- += linux/mtd/jedec.h
+header-test- += linux/mtd/nand_bch.h
+header-test- += linux/mtd/nand_ecc.h
+header-test- += linux/mtd/ndfc.h
+header-test- += linux/mtd/onenand.h
+header-test- += linux/mtd/pismo.h
+header-test- += linux/mtd/plat-ram.h
+header-test- += linux/mtd/spi-nor.h
+header-test- += linux/mv643xx_eth.h
+header-test- += linux/mv643xx.h
+header-test- += linux/mvebu-pmsu.h
+header-test- += linux/mxm-wmi.h
+header-test- += linux/ndctl.h
+header-test- += linux/netfilter/ipset/ip_set.h
+header-test- += linux/netfilter/ipset/ip_set_bitmap.h
+header-test- += linux/netfilter/ipset/ip_set_comment.h
+header-test- += linux/netfilter/ipset/ip_set_counter.h
+header-test- += linux/netfilter/ipset/ip_set_getport.h
+header-test- += linux/netfilter/ipset/ip_set_hash.h
+header-test- += linux/netfilter/ipset/ip_set_list.h
+header-test- += linux/netfilter/ipset/ip_set_skbinfo.h
+header-test- += linux/netfilter/ipset/ip_set_timeout.h
+header-test- += linux/netfilter/nf_conntrack_sip.h
+header-test- += linux/netfilter/x_tables.h
+header-test- += linux/netfilter_arp/arp_tables.h
+header-test- += linux/netfilter_bridge/ebtables.h
+header-test- += linux/netfilter_ipv4/ip_tables.h
+header-test- += linux/netfilter_ipv4/ip4_tables.h
+header-test- += linux/netfilter_ipv6/ip6_tables.h
+header-test- += linux/netfilter/nf_conntrack_amanda.h
+header-test- += linux/netfilter/nf_conntrack_ftp.h
+header-test- += linux/netfilter/nf_conntrack_h323_asn1.h
+header-test- += linux/netfilter/nf_conntrack_h323.h
+header-test- += linux/netfilter/nf_conntrack_irc.h
+header-test- += linux/netfilter/nf_conntrack_pptp.h
+header-test- += linux/netfilter/nf_conntrack_proto_gre.h
+header-test- += linux/netfilter/nf_conntrack_snmp.h
+header-test- += linux/netfilter/nf_conntrack_tftp.h
+header-test- += linux/nfsacl.h
+header-test- += linux/nfs_fs_i.h
+header-test- += linux/nfs_fs_sb.h
+header-test- += linux/nfs.h
+header-test- += linux/nfs_page.h
+header-test- += linux/nfs_xdr.h
+header-test- += linux/nl802154.h
+header-test- += linux/n_r3964.h
+header-test- += linux/nsc_gpio.h
+header-test- += linux/ns_common.h
+header-test- += linux/ntb_transport.h
+header-test- += linux/nubus.h
+header-test- += linux/nvme-fc-driver.h
+header-test- += linux/nvme-fc.h
+header-test- += linux/nvme-rdma.h
+header-test- += linux/nvram.h
+header-test- += linux/objagg.h
+header-test- += linux/of_clk.h
+header-test- += linux/of_net.h
+header-test- += linux/of_pdt.h
+header-test- += linux/olpc-ec.h
+header-test- += linux/omap-dmaengine.h
+header-test- += linux/omap-dma.h
+header-test- += linux/omap-gpmc.h
+header-test- += linux/omap-iommu.h
+header-test- += linux/omap-mailbox.h
+header-test- += linux/osq_lock.h
+header-test- += linux/overflow.h
+header-test- += linux/page_ext.h
+header-test- += linux/page-flags-layout.h
+header-test- += linux/page-isolation.h
+header-test- += linux/page_owner.h
+header-test- += linux/parport_pc.h
+header-test- += linux/parser.h
+header-test- += linux/pci-acpi.h
+header-test- += linux/pci-dma-compat.h
+header-test- += linux/pci_hotplug.h
+header-test- += linux/pda_power.h
+header-test- += linux/perf/arm_pmu.h
+header-test- += linux/perf_regs.h
+header-test- += linux/phy_fixed.h
+header-test- += linux/phy/omap_control_phy.h
+header-test- += linux/phy/tegra/xusb.h
+header-test- += linux/phy/ulpi_phy.h
+header-test- += linux/pinctrl/pinconf-generic.h
+header-test- += linux/pinctrl/pinconf.h
+header-test- += linux/pinctrl/pinctrl.h
+header-test- += linux/pipe_fs_i.h
+header-test- += linux/pktcdvd.h
+header-test- += linux/pl320-ipc.h
+header-test- += linux/pl353-smc.h
+header-test- += linux/platform_data/ad5449.h
+header-test- += linux/platform_data/ad5755.h
+header-test- += linux/platform_data/ad7266.h
+header-test- += linux/platform_data/ad7291.h
+header-test- += linux/platform_data/ad7298.h
+header-test- += linux/platform_data/ad7303.h
+header-test- += linux/platform_data/ad7791.h
+header-test- += linux/platform_data/ad7793.h
+header-test- += linux/platform_data/ad7887.h
+header-test- += linux/platform_data/adau17x1.h
+header-test- += linux/platform_data/adp8870.h
+header-test- += linux/platform_data/ads1015.h
+header-test- += linux/platform_data/ads7828.h
+header-test- += linux/platform_data/apds990x.h
+header-test- += linux/platform_data/arm-ux500-pm.h
+header-test- += linux/platform_data/asoc-s3c.h
+header-test- += linux/platform_data/at91_adc.h
+header-test- += linux/platform_data/ata-pxa.h
+header-test- += linux/platform_data/atmel.h
+header-test- += linux/platform_data/bh1770glc.h
+header-test- += linux/platform_data/brcmfmac.h
+header-test- += linux/platform_data/clk-u300.h
+header-test- += linux/platform_data/cyttsp4.h
+header-test- += linux/platform_data/dma-coh901318.h
+header-test- += linux/platform_data/dma-imx-sdma.h
+header-test- += linux/platform_data/dma-mcf-edma.h
+header-test- += linux/platform_data/dma-s3c24xx.h
+header-test- += linux/platform_data/dmtimer-omap.h
+header-test- += linux/platform_data/dsa.h
+header-test- += linux/platform_data/edma.h
+header-test- += linux/platform_data/elm.h
+header-test- += linux/platform_data/emif_plat.h
+header-test- += linux/platform_data/fsa9480.h
+header-test- += linux/platform_data/g762.h
+header-test- += linux/platform_data/gpio-ath79.h
+header-test- += linux/platform_data/gpio-davinci.h
+header-test- += linux/platform_data/gpio-dwapb.h
+header-test- += linux/platform_data/gpio-htc-egpio.h
+header-test- += linux/platform_data/gpmc-omap.h
+header-test- += linux/platform_data/hsmmc-omap.h
+header-test- += linux/platform_data/hwmon-s3c.h
+header-test- += linux/platform_data/i2c-davinci.h
+header-test- += linux/platform_data/i2c-imx.h
+header-test- += linux/platform_data/i2c-mux-reg.h
+header-test- += linux/platform_data/i2c-ocores.h
+header-test- += linux/platform_data/i2c-xiic.h
+header-test- += linux/platform_data/intel-spi.h
+header-test- += linux/platform_data/invensense_mpu6050.h
+header-test- += linux/platform_data/irda-pxaficp.h
+header-test- += linux/platform_data/irda-sa11x0.h
+header-test- += linux/platform_data/itco_wdt.h
+header-test- += linux/platform_data/jz4740/jz4740_nand.h
+header-test- += linux/platform_data/keyboard-pxa930_rotary.h
+header-test- += linux/platform_data/keypad-omap.h
+header-test- += linux/platform_data/leds-lp55xx.h
+header-test- += linux/platform_data/leds-omap.h
+header-test- += linux/platform_data/lp855x.h
+header-test- += linux/platform_data/lp8727.h
+header-test- += linux/platform_data/max197.h
+header-test- += linux/platform_data/max3421-hcd.h
+header-test- += linux/platform_data/max732x.h
+header-test- += linux/platform_data/mcs.h
+header-test- += linux/platform_data/mdio-bcm-unimac.h
+header-test- += linux/platform_data/mdio-gpio.h
+header-test- += linux/platform_data/media/si4713.h
+header-test- += linux/platform_data/mlxreg.h
+header-test- += linux/platform_data/mmc-omap.h
+header-test- += linux/platform_data/mmc-sdhci-s3c.h
+header-test- += linux/platform_data/mmp_audio.h
+header-test- += linux/platform_data/mtd-orion_nand.h
+header-test- += linux/platform_data/mv88e6xxx.h
+header-test- += linux/platform_data/net-cw1200.h
+header-test- += linux/platform_data/omapdss.h
+header-test- += linux/platform_data/omap-twl4030.h
+header-test- += linux/platform_data/pcf857x.h
+header-test- += linux/platform_data/pixcir_i2c_ts.h
+header-test- += linux/platform_data/pwm_omap_dmtimer.h
+header-test- += linux/platform_data/pxa2xx_udc.h
+header-test- += linux/platform_data/pxa_sdhci.h
+header-test- += linux/platform_data/remoteproc-omap.h
+header-test- += linux/platform_data/sa11x0-serial.h
+header-test- += linux/platform_data/sc18is602.h
+header-test- += linux/platform_data/sdhci-pic32.h
+header-test- += linux/platform_data/serial-sccnxp.h
+header-test- += linux/platform_data/sht3x.h
+header-test- += linux/platform_data/shtc1.h
+header-test- += linux/platform_data/si5351.h
+header-test- += linux/platform_data/sky81452-backlight.h
+header-test- += linux/platform_data/spi-davinci.h
+header-test- += linux/platform_data/spi-ep93xx.h
+header-test- += linux/platform_data/spi-mt65xx.h
+header-test- += linux/platform_data/spi-nuc900.h
+header-test- += linux/platform_data/st_sensors_pdata.h
+header-test- += linux/platform_data/timer-ixp4xx.h
+header-test- += linux/platform_data/ti-sysc.h
+header-test- += linux/platform_data/touchscreen-s3c2410.h
+header-test- += linux/platform_data/tsc2007.h
+header-test- += linux/platform_data/tsl2772.h
+header-test- += linux/platform_data/uio_pruss.h
+header-test- += linux/platform_data/usb3503.h
+header-test- += linux/platform_data/usb-davinci.h
+header-test- += linux/platform_data/usb-ehci-mxc.h
+header-test- += linux/platform_data/usb-ehci-orion.h
+header-test- += linux/platform_data/usb-mx2.h
+header-test- += linux/platform_data/usb-ohci-s3c2410.h
+header-test- += linux/platform_data/usb-omap.h
+header-test- += linux/platform_data/usb-s3c2410_udc.h
+header-test- += linux/platform_data/ux500_wdt.h
+header-test- += linux/platform_data/video-clcd-versatile.h
+header-test- += linux/platform_data/video-imxfb.h
+header-test- += linux/platform_data/video-nuc900fb.h
+header-test- += linux/platform_data/video-pxafb.h
+header-test- += linux/platform_data/video_s3c.h
+header-test- += linux/platform_data/voltage-omap.h
+header-test- += linux/platform_data/x86/apple.h
+header-test- += linux/platform_data/x86/clk-pmc-atom.h
+header-test- += linux/platform_data/x86/pmc_atom.h
+header-test- += linux/platform_data/xtalk-bridge.h
+header-test- += linux/pm2301_charger.h
+header-test- += linux/pmbus.h
+header-test- += linux/pmu.h
+header-test- += linux/pm_wakeirq.h
+header-test- += linux/pm_wakeup.h
+header-test- += linux/posix_acl.h
+header-test- += linux/posix_acl_xattr.h
+header-test- += linux/power/ab8500.h
+header-test- += linux/power/bq27xxx_battery.h
+header-test- += linux/power/generic-adc-battery.h
+header-test- += linux/power/jz4740-battery.h
+header-test- += linux/power/max17042_battery.h
+header-test- += linux/power/max8903_charger.h
+header-test- += linux/ppp-comp.h
+header-test- += linux/pps-gpio.h
+header-test- += linux/pr.h
+header-test- += linux/processor.h
+header-test- += linux/proc_ns.h
+header-test- += linux/psi.h
+header-test- += linux/psp-sev.h
+header-test- += linux/pstore.h
+header-test- += linux/ptr_ring.h
+header-test- += linux/qcom-geni-se.h
+header-test- += linux/qed/eth_common.h
+header-test- += linux/qed/fcoe_common.h
+header-test- += linux/qed/iscsi_common.h
+header-test- += linux/qed/iwarp_common.h
+header-test- += linux/qed/qed_eth_if.h
+header-test- += linux/qed/qed_fcoe_if.h
+header-test- += linux/qed/rdma_common.h
+header-test- += linux/qed/storage_common.h
+header-test- += linux/qed/tcp_common.h
+header-test- += linux/qnx6_fs.h
+header-test- += linux/quicklist.h
+header-test- += linux/ramfs.h
+header-test- += linux/range.h
+header-test- += linux/rculist_bl.h
+header-test- += linux/rculist_nulls.h
+header-test- += linux/rcu_node_tree.h
+header-test- += linux/rcutiny.h
+header-test- += linux/rcutree.h
+header-test- += linux/reboot-mode.h
+header-test- += linux/regulator/fixed.h
+header-test- += linux/regulator/gpio-regulator.h
+header-test- += linux/regulator/max8973-regulator.h
+header-test- += linux/regulator/of_regulator.h
+header-test- += linux/regulator/tps51632-regulator.h
+header-test- += linux/regulator/tps62360.h
+header-test- += linux/regulator/tps6507x.h
+header-test- += linux/regulator/userspace-consumer.h
+header-test- += linux/remoteproc/st_slim_rproc.h
+header-test- += linux/reset/socfpga.h
+header-test- += linux/reset/sunxi.h
+header-test- += linux/rtc/m48t59.h
+header-test- += linux/rtc/rtc-omap.h
+header-test- += linux/rtc/sirfsoc_rtciobrg.h
+header-test- += linux/rwlock.h
+header-test- += linux/rwlock_types.h
+header-test- += linux/scc.h
+header-test- += linux/sched_clock.h
+header-test- += linux/sched/deadline.h
+header-test- += linux/sched/sysctl.h
+header-test- += linux/scpi_protocol.h
+header-test- += linux/scx200_gpio.h
+header-test- += linux/seccomp.h
+header-test- += linux/sed-opal.h
+header-test- += linux/seg6_iptunnel.h
+header-test- += linux/selection.h
+header-test- += linux/set_memory.h
+header-test- += linux/shrinker.h
+header-test- += linux/sirfsoc_dma.h
+header-test- += linux/skb_array.h
+header-test- += linux/slab_def.h
+header-test- += linux/slub_def.h
+header-test- += linux/sm501.h
+header-test- += linux/smc91x.h
+header-test- += linux/soc/actions/owl-sps.h
+header-test- += linux/soc/amlogic/meson-canvas.h
+header-test- += linux/soc/brcmstb/brcmstb.h
+header-test- += linux/soc/ixp4xx/npe.h
+header-test- += linux/soc/mediatek/infracfg.h
+header-test- += linux/soc/qcom/smd-rpm.h
+header-test- += linux/soc/qcom/smem.h
+header-test- += linux/soc/qcom/smem_state.h
+header-test- += linux/soc/qcom/wcnss_ctrl.h
+header-test- += linux/soc/renesas/rcar-rst.h
+header-test- += linux/soc/samsung/exynos-pmu.h
+header-test- += linux/soc/sunxi/sunxi_sram.h
+header-test- += linux/soc/ti/ti-msgmgr.h
+header-test- += linux/soc/ti/ti_sci_inta_msi.h
+header-test- += linux/soc/ti/ti_sci_protocol.h
+header-test- += linux/soundwire/sdw.h
+header-test- += linux/soundwire/sdw_intel.h
+header-test- += linux/soundwire/sdw_type.h
+header-test- += linux/spi/ad7877.h
+header-test- += linux/spi/ads7846.h
+header-test- += linux/spi/at86rf230.h
+header-test- += linux/spi/ds1305.h
+header-test- += linux/spi/libertas_spi.h
+header-test- += linux/spi/lms283gf05.h
+header-test- += linux/spi/max7301.h
+header-test- += linux/spi/mcp23s08.h
+header-test- += linux/spinlock_api_smp.h
+header-test- += linux/spinlock_api_up.h
+header-test- += linux/spinlock_types.h
+header-test- += linux/spi/rspi.h
+header-test- += linux/spi/s3c24xx.h
+header-test- += linux/spi/sh_msiof.h
+header-test- += linux/spi/spi_bitbang.h
+header-test- += linux/spi/spi-fsl-dspi.h
+header-test- += linux/spi/spi_gpio.h
+header-test- += linux/spi/xilinx_spi.h
+header-test- += linux/splice.h
+header-test- += linux/sram.h
+header-test- += linux/srcutiny.h
+header-test- += linux/srcutree.h
+header-test- += linux/ssbi.h
+header-test- += linux/ssb/ssb_driver_chipcommon.h
+header-test- += linux/ssb/ssb_driver_extif.h
+header-test- += linux/ssb/ssb_driver_mips.h
+header-test- += linux/ssb/ssb_driver_pci.h
+header-test- += linux/stackdepot.h
+header-test- += linux/stmp3xxx_rtc_wdt.h
+header-test- += linux/string_helpers.h
+header-test- += linux/sungem_phy.h
+header-test- += linux/sunrpc/msg_prot.h
+header-test- += linux/sunrpc/rpc_pipe_fs.h
+header-test- += linux/sunrpc/xprtmultipath.h
+header-test- += linux/sunrpc/xprtsock.h
+header-test- += linux/sunxi-rsb.h
+header-test- += linux/svga.h
+header-test- += linux/sw842.h
+header-test- += linux/swapfile.h
+header-test- += linux/swapops.h
+header-test- += linux/swiotlb.h
+header-test- += linux/sysv_fs.h
+header-test- += linux/t10-pi.h
+header-test- += linux/task_io_accounting.h
+header-test- += linux/tick.h
+header-test- += linux/timb_dma.h
+header-test- += linux/timekeeping32.h
+header-test- += linux/timekeeping.h
+header-test- += linux/tsacct_kern.h
+header-test- += linux/ts-nbus.h
+header-test- += linux/tty_flip.h
+header-test- += linux/tty_ldisc.h
+header-test- += linux/ucb1400.h
+header-test- += linux/usb/association.h
+header-test- += linux/usb/cdc_ncm.h
+header-test- += linux/usb/cdc-wdm.h
+header-test- += linux/usb/ezusb.h
+header-test- += linux/usb/gadget_configfs.h
+header-test- += linux/usb/gpio_vbus.h
+header-test- += linux/usb/hcd.h
+header-test- += linux/usb/iowarrior.h
+header-test- += linux/usb/irda.h
+header-test- += linux/usb/isp116x.h
+header-test- += linux/usb/isp1362.h
+header-test- += linux/usb/musb.h
+header-test- += linux/usb/net2280.h
+header-test- += linux/usb/ohci_pdriver.h
+header-test- += linux/usb/otg-fsm.h
+header-test- += linux/usb/pd_ado.h
+header-test- += linux/usb/r8a66597.h
+header-test- += linux/usb/rndis_host.h
+header-test- += linux/usb/serial.h
+header-test- += linux/usb/sl811.h
+header-test- += linux/usb/storage.h
+header-test- += linux/usb/uas.h
+header-test- += linux/usb/usb338x.h
+header-test- += linux/usb/usbnet.h
+header-test- += linux/usb_usual.h
+header-test- += linux/usb/wusb-wa.h
+header-test- += linux/usb/xhci-dbgp.h
+header-test- += linux/userfaultfd_k.h
+header-test- += linux/user-return-notifier.h
+header-test- += linux/verification.h
+header-test- += linux/via_core.h
+header-test- += linux/via_i2c.h
+header-test- += linux/virtio_byteorder.h
+header-test- += linux/virtio_ring.h
+header-test- += linux/visorbus.h
+header-test- += linux/vme.h
+header-test- += linux/vmstat.h
+header-test- += linux/vringh.h
+header-test- += linux/vt_buffer.h
+header-test- += linux/zorro.h
+header-test- += linux/zpool.h
+header-test- += math-emu/double.h
+header-test- += math-emu/op-common.h
+header-test- += math-emu/quad.h
+header-test- += math-emu/single.h
+header-test- += math-emu/soft-fp.h
+header-test- += media/davinci/dm355_ccdc.h
+header-test- += media/davinci/dm644x_ccdc.h
+header-test- += media/davinci/isif.h
+header-test- += media/davinci/vpbe_osd.h
+header-test- += media/davinci/vpbe_types.h
+header-test- += media/davinci/vpif_types.h
+header-test- += media/demux.h
+header-test- += media/drv-intf/soc_mediabus.h
+header-test- += media/dvb_net.h
+header-test- += media/fwht-ctrls.h
+header-test- += media/i2c/ad9389b.h
+header-test- += media/i2c/adv7343.h
+header-test- += media/i2c/adv7511.h
+header-test- += media/i2c/adv7842.h
+header-test- += media/i2c/m5mols.h
+header-test- += media/i2c/mt9m032.h
+header-test- += media/i2c/mt9t112.h
+header-test- += media/i2c/mt9v032.h
+header-test- += media/i2c/ov2659.h
+header-test- += media/i2c/ov7670.h
+header-test- += media/i2c/rj54n1cb0c.h
+header-test- += media/i2c/saa6588.h
+header-test- += media/i2c/saa7115.h
+header-test- += media/i2c/sr030pc30.h
+header-test- += media/i2c/tc358743.h
+header-test- += media/i2c/tda1997x.h
+header-test- += media/i2c/ths7303.h
+header-test- += media/i2c/tvaudio.h
+header-test- += media/i2c/tvp514x.h
+header-test- += media/i2c/tvp7002.h
+header-test- += media/i2c/wm8775.h
+header-test- += media/imx.h
+header-test- += media/media-dev-allocator.h
+header-test- += media/mpeg2-ctrls.h
+header-test- += media/rcar-fcp.h
+header-test- += media/tuner-types.h
+header-test- += media/tveeprom.h
+header-test- += media/v4l2-flash-led-class.h
+header-test- += misc/altera.h
+header-test- += misc/cxl-base.h
+header-test- += misc/cxllib.h
+header-test- += net/9p/9p.h
+header-test- += net/9p/client.h
+header-test- += net/9p/transport.h
+header-test- += net/af_vsock.h
+header-test- += net/ax88796.h
+header-test- += net/bluetooth/hci_core.h
+header-test- += net/bluetooth/hci.h
+header-test- += net/bluetooth/hci_mon.h
+header-test- += net/bluetooth/hci_sock.h
+header-test- += net/bluetooth/l2cap.h
+header-test- += net/bluetooth/mgmt.h
+header-test- += net/bluetooth/rfcomm.h
+header-test- += net/bluetooth/sco.h
+header-test- += net/bond_options.h
+header-test- += net/caif/cfsrvl.h
+header-test- += net/codel_impl.h
+header-test- += net/codel_qdisc.h
+header-test- += net/compat.h
+header-test- += net/datalink.h
+header-test- += net/dcbevent.h
+header-test- += net/dcbnl.h
+header-test- += net/dn_dev.h
+header-test- += net/dn_fib.h
+header-test- += net/dn_neigh.h
+header-test- += net/dn_nsp.h
+header-test- += net/dn_route.h
+header-test- += net/erspan.h
+header-test- += net/esp.h
+header-test- += net/ethoc.h
+header-test- += net/firewire.h
+header-test- += net/flow_offload.h
+header-test- += net/fq.h
+header-test- += net/fq_impl.h
+header-test- += net/garp.h
+header-test- += net/gtp.h
+header-test- += net/gue.h
+header-test- += net/hwbm.h
+header-test- += net/ila.h
+header-test- += net/inet6_connection_sock.h
+header-test- += net/inet_common.h
+header-test- += net/inet_frag.h
+header-test- += net/ip6_route.h
+header-test- += net/ip_vs.h
+header-test- += net/ipcomp.h
+header-test- += net/ipconfig.h
+header-test- += net/iucv/af_iucv.h
+header-test- += net/iucv/iucv.h
+header-test- += net/lapb.h
+header-test- += net/llc_c_ac.h
+header-test- += net/llc_c_st.h
+header-test- += net/llc_s_ac.h
+header-test- += net/llc_s_ev.h
+header-test- += net/llc_s_st.h
+header-test- += net/mpls_iptunnel.h
+header-test- += net/mrp.h
+header-test- += net/ncsi.h
+header-test- += net/netevent.h
+header-test- += net/netfilter/br_netfilter.h
+header-test- += net/netfilter/ipv4/nf_dup_ipv4.h
+header-test- += net/netfilter/ipv6/nf_defrag_ipv6.h
+header-test- += net/netfilter/ipv6/nf_dup_ipv6.h
+header-test- += net/netfilter/nf_conntrack.h
+header-test- += net/netfilter/nf_conntrack_acct.h
+header-test- += net/netfilter/nf_conntrack_bridge.h
+header-test- += net/netfilter/nf_conntrack_core.h
+header-test- += net/netfilter/nf_conntrack_count.h
+header-test- += net/netfilter/nf_conntrack_ecache.h
+header-test- += net/netfilter/nf_conntrack_expect.h
+header-test- += net/netfilter/nf_conntrack_extend.h
+header-test- += net/netfilter/nf_conntrack_helper.h
+header-test- += net/netfilter/nf_conntrack_l4proto.h
+header-test- += net/netfilter/nf_conntrack_labels.h
+header-test- += net/netfilter/nf_conntrack_seqadj.h
+header-test- += net/netfilter/nf_conntrack_synproxy.h
+header-test- += net/netfilter/nf_conntrack_timeout.h
+header-test- += net/netfilter/nf_conntrack_timestamp.h
+header-test- += net/netfilter/nf_conntrack_tuple.h
+header-test- += net/netfilter/nf_dup_netdev.h
+header-test- += net/netfilter/nf_flow_table.h
+header-test- += net/netfilter/nf_nat.h
+header-test- += net/netfilter/nf_nat_helper.h
+header-test- += net/netfilter/nf_nat_masquerade.h
+header-test- += net/netfilter/nf_nat_redirect.h
+header-test- += net/netfilter/nf_queue.h
+header-test- += net/netfilter/nf_reject.h
+header-test- += net/netfilter/nf_synproxy.h
+header-test- += net/netfilter/nf_tables.h
+header-test- += net/netfilter/nf_tables_core.h
+header-test- += net/netfilter/nf_tables_ipv4.h
+header-test- += net/netfilter/nf_tables_ipv6.h
+header-test- += net/netfilter/nft_fib.h
+header-test- += net/netfilter/nft_reject.h
+header-test- += net/netns/can.h
+header-test- += net/netns/generic.h
+header-test- += net/netns/ieee802154_6lowpan.h
+header-test- += net/netns/ipv4.h
+header-test- += net/netns/ipv6.h
+header-test- += net/netns/mpls.h
+header-test- += net/netns/nftables.h
+header-test- += net/netns/sctp.h
+header-test- += net/netrom.h
+header-test- += net/p8022.h
+header-test- += net/phonet/pep.h
+header-test- += net/phonet/phonet.h
+header-test- += net/phonet/pn_dev.h
+header-test- += net/pptp.h
+header-test- += net/psample.h
+header-test- += net/psnap.h
+header-test- += net/regulatory.h
+header-test- += net/rose.h
+header-test- += net/sctp/auth.h
+header-test- += net/sctp/stream_interleave.h
+header-test- += net/sctp/stream_sched.h
+header-test- += net/sctp/tsnmap.h
+header-test- += net/sctp/ulpevent.h
+header-test- += net/sctp/ulpqueue.h
+header-test- += net/secure_seq.h
+header-test- += net/smc.h
+header-test- += net/stp.h
+header-test- += net/transp_v6.h
+header-test- += net/tun_proto.h
+header-test- += net/udplite.h
+header-test- += net/xdp.h
+header-test- += net/xdp_priv.h
+header-test- += pcmcia/cistpl.h
+header-test- += pcmcia/ds.h
+header-test- += rdma/ib.h
+header-test- += rdma/iw_portmap.h
+header-test- += rdma/opa_port_info.h
+header-test- += rdma/rdmavt_cq.h
+header-test- += rdma/restrack.h
+header-test- += rdma/signature.h
+header-test- += rdma/tid_rdma_defs.h
+header-test- += scsi/fc_encode.h
+header-test- += scsi/fc_frame.h
+header-test- += scsi/fc/fc_encaps.h
+header-test- += scsi/fc/fc_fc2.h
+header-test- += scsi/fc/fc_fcoe.h
+header-test- += scsi/fc/fc_fip.h
+header-test- += scsi/iser.h
+header-test- += scsi/libfc.h
+header-test- += scsi/libfcoe.h
+header-test- += scsi/libsas.h
+header-test- += scsi/sas_ata.h
+header-test- += scsi/scsicam.h
+header-test- += scsi/scsi_cmnd.h
+header-test- += scsi/scsi_dbg.h
+header-test- += scsi/scsi_device.h
+header-test- += scsi/scsi_dh.h
+header-test- += scsi/scsi_eh.h
+header-test- += scsi/scsi_host.h
+header-test- += scsi/scsi_ioctl.h
+header-test- += scsi/scsi_request.h
+header-test- += scsi/scsi_tcq.h
+header-test- += scsi/scsi_transport.h
+header-test- += scsi/scsi_transport_fc.h
+header-test- += scsi/scsi_transport_sas.h
+header-test- += scsi/scsi_transport_spi.h
+header-test- += scsi/scsi_transport_srp.h
+header-test- += scsi/sg.h
+header-test- += soc/arc/aux.h
+header-test- += soc/arc/mcip.h
+header-test- += soc/arc/timers.h
+header-test- += soc/brcmstb/common.h
+header-test- += soc/fsl/bman.h
+header-test- += soc/fsl/qe/qe.h
+header-test- += soc/fsl/qe/qe_ic.h
+header-test- += soc/fsl/qe/qe_tdm.h
+header-test- += soc/fsl/qe/ucc_fast.h
+header-test- += soc/fsl/qe/ucc.h
+header-test- += soc/fsl/qe/ucc_slow.h
+header-test- += soc/fsl/qman.h
+header-test- += soc/nps/common.h
+header-test-$(CONFIG_ARC) += soc/nps/mtm.h
+header-test- += soc/qcom/cmd-db.h
+header-test- += soc/qcom/rpmh.h
+header-test- += soc/qcom/tcs.h
+header-test- += soc/tegra/ahb.h
+header-test- += soc/tegra/bpmp-abi.h
+header-test- += soc/tegra/common.h
+header-test- += soc/tegra/flowctrl.h
+header-test- += soc/tegra/fuse.h
+header-test- += soc/tegra/mc.h
+header-test- += sound/ac97/compat.h
+header-test- += sound/aci.h
+header-test- += sound/ad1843.h
+header-test- += sound/adau1373.h
+header-test- += sound/ak4113.h
+header-test- += sound/ak4114.h
+header-test- += sound/ak4117.h
+header-test- += sound/cs35l33.h
+header-test- += sound/cs35l34.h
+header-test- += sound/cs35l35.h
+header-test- += sound/cs35l36.h
+header-test- += sound/cs4271.h
+header-test- += sound/cs42l52.h
+header-test- += sound/cs8427.h
+header-test- += sound/da7218.h
+header-test- += sound/da7219-aad.h
+header-test- += sound/da7219.h
+header-test- += sound/da9055.h
+header-test- += sound/emu8000.h
+header-test- += sound/emux_synth.h
+header-test- += sound/hda_component.h
+header-test- += sound/hda_hwdep.h
+header-test- += sound/hda_i915.h
+header-test- += sound/hwdep.h
+header-test- += sound/i2c.h
+header-test- += sound/l3.h
+header-test- += sound/max98088.h
+header-test- += sound/max98095.h
+header-test- += sound/mixer_oss.h
+header-test- += sound/omap-hdmi-audio.h
+header-test- += sound/pcm_drm_eld.h
+header-test- += sound/pcm_iec958.h
+header-test- += sound/pcm_oss.h
+header-test- += sound/pxa2xx-lib.h
+header-test- += sound/rt286.h
+header-test- += sound/rt298.h
+header-test- += sound/rt5645.h
+header-test- += sound/rt5659.h
+header-test- += sound/rt5660.h
+header-test- += sound/rt5665.h
+header-test- += sound/rt5670.h
+header-test- += sound/s3c24xx_uda134x.h
+header-test- += sound/seq_device.h
+header-test- += sound/seq_kernel.h
+header-test- += sound/seq_midi_emul.h
+header-test- += sound/seq_oss.h
+header-test- += sound/soc-acpi-intel-match.h
+header-test- += sound/soc-dai.h
+header-test- += sound/soc-dapm.h
+header-test- += sound/soc-dpcm.h
+header-test- += sound/sof/control.h
+header-test- += sound/sof/dai.h
+header-test- += sound/sof/dai-intel.h
+header-test- += sound/sof/header.h
+header-test- += sound/sof/info.h
+header-test- += sound/sof/pm.h
+header-test- += sound/sof/stream.h
+header-test- += sound/sof/topology.h
+header-test- += sound/sof/trace.h
+header-test- += sound/sof/xtensa.h
+header-test- += sound/spear_spdif.h
+header-test- += sound/sta32x.h
+header-test- += sound/sta350.h
+header-test- += sound/tea6330t.h
+header-test- += sound/tlv320aic32x4.h
+header-test- += sound/tlv320dac33-plat.h
+header-test- += sound/uda134x.h
+header-test- += sound/wavefront.h
+header-test- += sound/wm8903.h
+header-test- += sound/wm8904.h
+header-test- += sound/wm8960.h
+header-test- += sound/wm8962.h
+header-test- += sound/wm8993.h
+header-test- += sound/wm8996.h
+header-test- += sound/wm9081.h
+header-test- += sound/wm9090.h
+header-test- += target/iscsi/iscsi_target_stat.h
+header-test- += trace/bpf_probe.h
+header-test- += trace/events/9p.h
+header-test- += trace/events/afs.h
+header-test- += trace/events/asoc.h
+header-test- += trace/events/bcache.h
+header-test- += trace/events/block.h
+header-test- += trace/events/cachefiles.h
+header-test- += trace/events/cgroup.h
+header-test- += trace/events/clk.h
+header-test- += trace/events/cma.h
+header-test- += trace/events/ext4.h
+header-test- += trace/events/f2fs.h
+header-test- += trace/events/fscache.h
+header-test- += trace/events/fs_dax.h
+header-test- += trace/events/fsi.h
+header-test- += trace/events/fsi_master_ast_cf.h
+header-test- += trace/events/fsi_master_gpio.h
+header-test- += trace/events/huge_memory.h
+header-test- += trace/events/ib_mad.h
+header-test- += trace/events/ib_umad.h
+header-test- += trace/events/iscsi.h
+header-test- += trace/events/jbd2.h
+header-test- += trace/events/kvm.h
+header-test- += trace/events/kyber.h
+header-test- += trace/events/libata.h
+header-test- += trace/events/mce.h
+header-test- += trace/events/mdio.h
+header-test- += trace/events/migrate.h
+header-test- += trace/events/mmflags.h
+header-test- += trace/events/nbd.h
+header-test- += trace/events/nilfs2.h
+header-test- += trace/events/pwc.h
+header-test- += trace/events/rdma.h
+header-test- += trace/events/rpcgss.h
+header-test- += trace/events/rpcrdma.h
+header-test- += trace/events/rxrpc.h
+header-test- += trace/events/scsi.h
+header-test- += trace/events/siox.h
+header-test- += trace/events/spi.h
+header-test- += trace/events/swiotlb.h
+header-test- += trace/events/syscalls.h
+header-test- += trace/events/target.h
+header-test- += trace/events/thermal_power_allocator.h
+header-test- += trace/events/timer.h
+header-test- += trace/events/wbt.h
+header-test- += trace/events/xen.h
+header-test- += trace/perf.h
+header-test- += trace/trace_events.h
+header-test- += uapi/drm/vmwgfx_drm.h
+header-test- += uapi/linux/a.out.h
+header-test- += uapi/linux/coda.h
+header-test- += uapi/linux/coda_psdev.h
+header-test- += uapi/linux/errqueue.h
+header-test- += uapi/linux/eventpoll.h
+header-test- += uapi/linux/hdlc/ioctl.h
+header-test- += uapi/linux/input.h
+header-test- += uapi/linux/kvm.h
+header-test- += uapi/linux/kvm_para.h
+header-test- += uapi/linux/lightnvm.h
+header-test- += uapi/linux/mic_common.h
+header-test- += uapi/linux/netfilter_arp/arpt_mangle.h
+header-test- += uapi/linux/netfilter_arp/arp_tables.h
+header-test- += uapi/linux/netfilter_ipv4/ipt_LOG.h
+header-test- += uapi/linux/netfilter_ipv4/ip_tables.h
+header-test- += uapi/linux/netfilter_ipv6/ip6t_LOG.h
+header-test- += uapi/linux/netfilter_ipv6/ip6_tables.h
+header-test- += uapi/linux/netfilter/ipset/ip_set_bitmap.h
+header-test- += uapi/linux/netfilter/ipset/ip_set_hash.h
+header-test- += uapi/linux/netfilter/ipset/ip_set_list.h
+header-test- += uapi/linux/netfilter/nf_synproxy.h
+header-test- += uapi/linux/netfilter/xt_policy.h
+header-test- += uapi/linux/netfilter/xt_set.h
+header-test- += uapi/linux/nilfs2_ondisk.h
+header-test- += uapi/linux/patchkey.h
+header-test- += uapi/linux/scc.h
+header-test- += uapi/linux/seg6_iptunnel.h
+header-test- += uapi/linux/smc_diag.h
+header-test- += uapi/linux/timex.h
+header-test- += uapi/linux/videodev2.h
+header-test- += uapi/scsi/scsi_bsg_fc.h
+header-test- += uapi/sound/asound.h
+header-test- += uapi/sound/sof/eq.h
+header-test- += uapi/sound/sof/fw.h
+header-test- += uapi/sound/sof/header.h
+header-test- += uapi/sound/sof/manifest.h
+header-test- += uapi/sound/sof/trace.h
+header-test- += uapi/xen/evtchn.h
+header-test- += uapi/xen/gntdev.h
+header-test- += uapi/xen/privcmd.h
+header-test- += vdso/vsyscall.h
+header-test- += video/broadsheetfb.h
+header-test- += video/cvisionppc.h
+header-test- += video/gbe.h
+header-test- += video/kyro.h
+header-test- += video/maxinefb.h
+header-test- += video/metronomefb.h
+header-test- += video/neomagic.h
+header-test- += video/of_display_timing.h
+header-test- += video/omapvrfb.h
+header-test- += video/s1d13xxxfb.h
+header-test- += video/sstfb.h
+header-test- += video/tgafb.h
+header-test- += video/udlfb.h
+header-test- += video/uvesafb.h
+header-test- += video/w100fb.h
+header-test- += xen/acpi.h
+header-test- += xen/arm/hypercall.h
+header-test- += xen/arm/page-coherent.h
+header-test- += xen/arm/page.h
+header-test- += xen/balloon.h
+header-test- += xen/events.h
+header-test- += xen/features.h
+header-test- += xen/grant_table.h
+header-test- += xen/hvm.h
+header-test- += xen/interface/callback.h
+header-test- += xen/interface/event_channel.h
+header-test- += xen/interface/grant_table.h
+header-test- += xen/interface/hvm/dm_op.h
+header-test- += xen/interface/hvm/hvm_op.h
+header-test- += xen/interface/hvm/hvm_vcpu.h
+header-test- += xen/interface/hvm/params.h
+header-test- += xen/interface/hvm/start_info.h
+header-test- += xen/interface/io/9pfs.h
+header-test- += xen/interface/io/blkif.h
+header-test- += xen/interface/io/console.h
+header-test- += xen/interface/io/displif.h
+header-test- += xen/interface/io/fbif.h
+header-test- += xen/interface/io/kbdif.h
+header-test- += xen/interface/io/netif.h
+header-test- += xen/interface/io/pciif.h
+header-test- += xen/interface/io/protocols.h
+header-test- += xen/interface/io/pvcalls.h
+header-test- += xen/interface/io/ring.h
+header-test- += xen/interface/io/sndif.h
+header-test- += xen/interface/io/tpmif.h
+header-test- += xen/interface/io/vscsiif.h
+header-test- += xen/interface/io/xs_wire.h
+header-test- += xen/interface/memory.h
+header-test- += xen/interface/nmi.h
+header-test- += xen/interface/physdev.h
+header-test- += xen/interface/platform.h
+header-test- += xen/interface/sched.h
+header-test- += xen/interface/vcpu.h
+header-test- += xen/interface/version.h
+header-test- += xen/interface/xen.h
+header-test- += xen/interface/xen-mca.h
+header-test- += xen/interface/xenpmu.h
+header-test- += xen/mem-reservation.h
+header-test- += xen/page.h
+header-test- += xen/platform_pci.h
+header-test- += xen/swiotlb-xen.h
+header-test- += xen/xenbus.h
+header-test- += xen/xen-front-pgdir-shbuf.h
+header-test- += xen/xen.h
+header-test- += xen/xen-ops.h
+
+# Do not include directly
+header-test- += linux/compiler-clang.h
+header-test- += linux/compiler-gcc.h
+header-test- += linux/patchkey.h
+header-test- += linux/rwlock_api_smp.h
+header-test- += linux/spinlock_types_up.h
+header-test- += linux/spinlock_up.h
+header-test- += linux/wimax/debug.h
+header-test- += rdma/uverbs_named_ioctl.h
+
+# asm-generic/*.h is used by asm/*.h, and should not be included directly
+header-test- += asm-generic/% uapi/asm-generic/%
+
+# Timestamp files touched by Kconfig
+header-test- += config/%
+
+# Timestamp files touched by scripts/adjust_autoksyms.sh
+header-test- += ksym/%
+
+# You could compile-test these, but maybe not so useful...
+header-test- += dt-bindings/%
+
+# Do not test generated headers. Stale headers are often left over when you
+# traverse the git history without cleaning.
+header-test- += generated/%
+
+# The rest are compile-tested
+header-test-pattern-y += */*.h */*/*.h */*/*/*.h */*/*/*/*.h
diff --git a/init/Kconfig b/init/Kconfig
index 667d68e1cdf4..2d04b6de1af6 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -105,6 +105,17 @@ config HEADER_TEST
If you are a developer or tester and want to ensure the requested
headers are self-contained, say Y here. Otherwise, choose N.
+config KERNEL_HEADER_TEST
+ bool "Compile test kernel headers"
+ depends on HEADER_TEST
+ help
+ Headers in include/ are used to build external moduls.
+ Compile test them to ensure they are self-contained, i.e.
+ compilable as standalone units.
+
+ If you are a developer or tester and want to ensure the headers
+ in include/ are self-contained, say Y here. Otherwise, choose N.
+
config UAPI_HEADER_TEST
bool "Compile test UAPI headers"
depends on HEADER_TEST && HEADERS_INSTALL
--
2.17.1
^ permalink raw reply related
* [PATCH v3 0/4] Compile-test UAPI and kernel headers
From: Masahiro Yamada @ 2019-06-27 16:38 UTC (permalink / raw)
To: linux-kbuild
Cc: Jani Nikula, Sam Ravnborg, Masahiro Yamada, Tony Luck, linux-doc,
John Fastabend, Jonathan Corbet, Jakub Kicinski, linux-riscv,
Daniel Borkmann, xdp-newbies, Anton Vorontsov, Palmer Dabbelt,
Matthias Brugger, Song Liu, Yonghong Song, Michal Marek,
Jesper Dangaard Brouer, Martin KaFai Lau, linux-mediatek,
linux-arm-kernel, Albert Ou, Colin Cross, David S. Miller,
Kees Cook, Alexei Starovoitov, netdev, linux-kernel, bpf
1/4: Compile-test exported headers (reworked in v2)
2/4: fix a flaw I noticed when I was working on this series.
Avoid generating intermediate wrappers.
3/4: maybe useful for 4/4 and in some other places.
Add header-test-pattern-y syntax.
4/4: Compile-test kernel-space headers in include/.
v2: compile as many headers as possible.
v3: exclude more headers causing build errors
Masahiro Yamada (4):
kbuild: compile-test UAPI headers to ensure they are self-contained
kbuild: do not create wrappers for header-test-y
kbuild: support header-test-pattern-y
kbuild: compile-test kernel headers to ensure they are self-contained
.gitignore | 1 -
Documentation/dontdiff | 1 -
Documentation/kbuild/makefiles.txt | 13 +-
Makefile | 4 +-
include/Kbuild | 1250 ++++++++++++++++++++++++++++
init/Kconfig | 22 +
scripts/Makefile.build | 10 +-
scripts/Makefile.lib | 13 +-
scripts/cc-system-headers.sh | 8 +
usr/.gitignore | 1 -
usr/Makefile | 2 +
usr/include/.gitignore | 3 +
usr/include/Makefile | 134 +++
13 files changed, 1449 insertions(+), 13 deletions(-)
create mode 100644 include/Kbuild
create mode 100755 scripts/cc-system-headers.sh
create mode 100644 usr/include/.gitignore
create mode 100644 usr/include/Makefile
--
2.17.1
^ permalink raw reply
* [PATCH v3 1/4] kbuild: compile-test UAPI headers to ensure they are self-contained
From: Masahiro Yamada @ 2019-06-27 16:38 UTC (permalink / raw)
To: linux-kbuild
Cc: Jani Nikula, Sam Ravnborg, Masahiro Yamada, Song Liu,
Alexei Starovoitov, netdev, Yonghong Song, linux-kernel,
linux-riscv, Michal Marek, Martin KaFai Lau, Palmer Dabbelt, bpf,
Daniel Borkmann, Albert Ou
In-Reply-To: <20190627163903.28398-1-yamada.masahiro@socionext.com>
Multiple people have suggested compile-testing UAPI headers to ensure
they can be really included from user-space. "make headers_check" is
obviously not enough to catch bugs, and we often leak references to
kernel-space definition to user-space.
Use the new header-test-y syntax to implement it. Please note exported
headers are compile-tested with a completely different set of compiler
flags. The header search path is set to $(objtree)/usr/include since
exported headers should not include unexported ones.
We use -std=gnu89 for the kernel space since the kernel code highly
depends on GNU extensions. On the other hand, UAPI headers should be
written in more standardized C, so they are compiled with -std=c90.
This will emit errors if C++ style comments, the keyword 'inline', etc.
are used. Please use C style comments (/* ... */), '__inline__', etc.
in UAPI headers.
There is additional compiler requirement to enable this test because
many of UAPI headers include <stdlib.h>, <sys/ioctl.h>, <sys/time.h>,
etc. directly or indirectly. You cannot use kernel.org pre-built
toolchains [1] since they lack <stdlib.h>.
I added scripts/cc-system-headers.sh to check the system header
availability, which CONFIG_UAPI_HEADER_TEST depends on.
For now, a lot of headers need to be excluded because they cannot
be compiled standalone, but this is a good start point.
[1] https://mirrors.edge.kernel.org/pub/tools/crosstool/index.html
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---
Changes in v3: None
Changes in v2:
- Add CONFIG_CPU_{BIG,LITTLE}_ENDIAN guard to avoid build error
- Use 'header-test-' instead of 'no-header-test'
- Avoid weird 'find' warning when cleaning
Makefile | 2 +-
init/Kconfig | 11 +++
| 8 +++
usr/.gitignore | 1 -
usr/Makefile | 2 +
usr/include/.gitignore | 3 +
usr/include/Makefile | 134 +++++++++++++++++++++++++++++++++++
7 files changed, 159 insertions(+), 2 deletions(-)
create mode 100755 scripts/cc-system-headers.sh
create mode 100644 usr/include/.gitignore
create mode 100644 usr/include/Makefile
diff --git a/Makefile b/Makefile
index 1f35aca4fe05..f23516980796 100644
--- a/Makefile
+++ b/Makefile
@@ -1363,7 +1363,7 @@ CLEAN_DIRS += $(MODVERDIR) include/ksym
CLEAN_FILES += modules.builtin.modinfo
# Directories & files removed with 'make mrproper'
-MRPROPER_DIRS += include/config usr/include include/generated \
+MRPROPER_DIRS += include/config include/generated \
arch/$(SRCARCH)/include/generated .tmp_objdiff
MRPROPER_FILES += .config .config.old .version \
Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
diff --git a/init/Kconfig b/init/Kconfig
index df5bba27e3fe..667d68e1cdf4 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -105,6 +105,17 @@ config HEADER_TEST
If you are a developer or tester and want to ensure the requested
headers are self-contained, say Y here. Otherwise, choose N.
+config UAPI_HEADER_TEST
+ bool "Compile test UAPI headers"
+ depends on HEADER_TEST && HEADERS_INSTALL
+ depends on $(success,$(srctree)/scripts/cc-system-headers.sh $(CC))
+ help
+ Compile test headers exported to user-space to ensure they are
+ self-contained, i.e. compilable as standalone units.
+
+ If you are a developer or tester and want to ensure the exported
+ headers are self-contained, say Y here. Otherwise, choose N.
+
config LOCALVERSION
string "Local version - append to kernel release"
help
--git a/scripts/cc-system-headers.sh b/scripts/cc-system-headers.sh
new file mode 100755
index 000000000000..1b3db369828c
--- /dev/null
+++ b/scripts/cc-system-headers.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+
+cat << "END" | $@ -E -x c - -o /dev/null >/dev/null 2>&1
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+END
diff --git a/usr/.gitignore b/usr/.gitignore
index 8e48117a3f3d..be5eae1df7eb 100644
--- a/usr/.gitignore
+++ b/usr/.gitignore
@@ -7,4 +7,3 @@ initramfs_data.cpio.gz
initramfs_data.cpio.bz2
initramfs_data.cpio.lzma
initramfs_list
-include
diff --git a/usr/Makefile b/usr/Makefile
index 4a70ae43c9cb..6a89eb019275 100644
--- a/usr/Makefile
+++ b/usr/Makefile
@@ -56,3 +56,5 @@ $(deps_initramfs): klibcdirs
$(obj)/$(datafile_y): $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs
$(Q)$(initramfs) -l $(ramfs-input) > $(obj)/$(datafile_d_y)
$(call if_changed,initfs)
+
+subdir-$(CONFIG_UAPI_HEADER_TEST) += include
diff --git a/usr/include/.gitignore b/usr/include/.gitignore
new file mode 100644
index 000000000000..a0991ff4402b
--- /dev/null
+++ b/usr/include/.gitignore
@@ -0,0 +1,3 @@
+*
+!.gitignore
+!Makefile
diff --git a/usr/include/Makefile b/usr/include/Makefile
new file mode 100644
index 000000000000..58ce96fa1701
--- /dev/null
+++ b/usr/include/Makefile
@@ -0,0 +1,134 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+# Unlike the kernel space, uapi headers are written in standard C.
+# - Forbid C++ style comments
+# - Use '__inline__', '__asm__' instead of 'inline', 'asm'
+#
+# -std=c90 (equivalent to -ansi) catches the violation of those.
+# We cannot go as far as adding -Wpedantic since it emits too many warnings.
+#
+# REVISIT: re-consider the proper set of compiler flags for uapi compile-test.
+
+UAPI_CFLAGS := -std=c90 -Wall -Werror=implicit-function-declaration
+
+override c_flags = $(UAPI_CFLAGS) -Wp,-MD,$(depfile) -I$(objtree)/usr/include
+
+# The following are excluded for now because they fail to build.
+# The cause of errors are mostly missing include directives.
+# Check one by one, and send a patch to each subsystem.
+#
+# Do not add a new header to the blacklist without legitimate reason.
+# Please consider to fix the header first.
+header-test- += asm/ipcbuf.h
+header-test- += asm/msgbuf.h
+header-test- += asm/sembuf.h
+header-test- += asm/shmbuf.h
+header-test- += asm/signal.h
+header-test- += asm/ucontext.h
+header-test- += drm/vmwgfx_drm.h
+header-test- += linux/am437x-vpfe.h
+header-test- += linux/android/binderfs.h
+header-test- += linux/android/binder.h
+header-test-$(CONFIG_CPU_BIG_ENDIAN) += linux/byteorder/big_endian.h
+header-test-$(CONFIG_CPU_LITTLE_ENDIAN) += linux/byteorder/little_endian.h
+header-test- += linux/coda.h
+header-test- += linux/coda_psdev.h
+header-test- += linux/dvb/audio.h
+header-test- += linux/dvb/osd.h
+header-test- += linux/elfcore.h
+header-test- += linux/errqueue.h
+header-test- += linux/fsmap.h
+header-test- += linux/hdlc/ioctl.h
+header-test- += linux/jffs2.h
+header-test- += linux/kexec.h
+header-test- += linux/matroxfb.h
+header-test- += linux/netfilter_bridge/ebtables.h
+header-test- += linux/netfilter_ipv4/ipt_LOG.h
+header-test- += linux/netfilter_ipv6/ip6t_LOG.h
+header-test- += linux/nfc.h
+header-test- += linux/nilfs2_ondisk.h
+header-test- += linux/omap3isp.h
+header-test- += linux/omapfb.h
+header-test- += linux/patchkey.h
+header-test- += linux/phonet.h
+header-test- += linux/reiserfs_xattr.h
+header-test- += linux/scc.h
+header-test- += linux/sctp.h
+header-test- += linux/signal.h
+header-test- += linux/sysctl.h
+header-test- += linux/usb/audio.h
+header-test- += linux/ivtv.h
+header-test- += linux/v4l2-mediabus.h
+header-test- += linux/v4l2-subdev.h
+header-test- += linux/videodev2.h
+header-test- += linux/vm_sockets.h
+header-test- += misc/ocxl.h
+header-test- += mtd/mtd-abi.h
+header-test- += scsi/scsi_bsg_fc.h
+header-test- += scsi/scsi_netlink_fc.h
+header-test- += scsi/scsi_netlink.h
+header-test- += sound/asequencer.h
+header-test- += sound/asound.h
+header-test- += sound/asoc.h
+header-test- += sound/compress_offload.h
+header-test- += sound/emu10k1.h
+header-test- += sound/sfnt_info.h
+header-test- += sound/sof/eq.h
+header-test- += sound/sof/fw.h
+header-test- += sound/sof/header.h
+header-test- += sound/sof/manifest.h
+header-test- += sound/sof/trace.h
+header-test- += xen/evtchn.h
+header-test- += xen/gntdev.h
+header-test- += xen/privcmd.h
+
+# more headers are broken in some architectures
+
+ifeq ($(SRCARCH),arc)
+header-test- += linux/bpf_perf_event.h
+endif
+
+ifeq ($(SRCARCH),ia64)
+header-test- += asm/setup.h
+header-test- += asm/sigcontext.h
+header-test- += asm/perfmon.h
+header-test- += asm/perfmon_default_smpl.h
+header-test- += linux/if_bonding.h
+endif
+
+ifeq ($(SRCARCH),mips)
+header-test- += asm/stat.h
+endif
+
+ifeq ($(SRCARCH),powerpc)
+header-test- += asm/stat.h
+header-test- += linux/bpf_perf_event.h
+endif
+
+ifeq ($(SRCARCH),riscv)
+header-test- += linux/bpf_perf_event.h
+endif
+
+ifeq ($(SRCARCH),s390)
+header-test- += asm/runtime_instr.h
+header-test- += asm/zcrypt.h
+endif
+
+ifeq ($(SRCARCH),sparc)
+header-test- += asm/stat.h
+header-test- += asm/uctx.h
+header-test- += asm/fbio.h
+header-test- += asm/openpromio.h
+endif
+
+# asm-generic/*.h is used by asm/*.h, and should not be included directly
+header-test- += asm-generic/%
+
+# The rest are compile-tested
+header-test-y += $(filter-out $(header-test-), \
+ $(patsubst $(obj)/%,%, $(wildcard \
+ $(addprefix $(obj)/, *.h */*.h */*/*.h */*/*/*.h))))
+
+# For GNU Make <= 4.2.1, $(wildcard $(obj)/*/) matches to not only directories
+# but also regular files. Use $(filter %/, ...) just in case.
+clean-dirs += $(patsubst $(obj)/%/,%,$(filter %/, $(wildcard $(obj)/*/)))
--
2.17.1
^ permalink raw reply related
* Re: [PATCH net-next v2] net: ethtool: Allow parsing ETHER_FLOW types when using flow_rule
From: David Miller @ 2019-06-27 16:39 UTC (permalink / raw)
To: maxime.chevallier
Cc: pablo, f.fainelli, jiri, jakub.kicinski, netdev, linux-kernel,
antoine.tenart, thomas.petazzoni
In-Reply-To: <20190627085226.7658-1-maxime.chevallier@bootlin.com>
From: Maxime Chevallier <maxime.chevallier@bootlin.com>
Date: Thu, 27 Jun 2019 10:52:26 +0200
> When parsing an ethtool_rx_flow_spec, users can specify an ethernet flow
> which could contain matches based on the ethernet header, such as the
> MAC address, the VLAN tag or the ethertype.
>
> ETHER_FLOW uses the src and dst ethernet addresses, along with the
> ethertype as keys. Matches based on the vlan tag are also possible, but
> they are specified using the special FLOW_EXT flag.
>
> Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
> ---
> V2 : Add src and dst mac address parsing, as suggested by Pablo.
Applied, thanks.
^ permalink raw reply
* Re: [RFC PATCH 1/1] Documentation: net: dsa: b53: Describe b53 configuration
From: Florian Fainelli @ 2019-06-27 16:38 UTC (permalink / raw)
To: Benedikt Spranger
Cc: netdev, Sebastian Andrzej Siewior, Kurt Kanzenbach, Andrew Lunn,
Vivien Didelot
In-Reply-To: <20190627101506.19727-2-b.spranger@linutronix.de>
On 6/27/19 3:15 AM, Benedikt Spranger wrote:
> Document the different needs of documentation for the b53 driver.
>
> Signed-off-by: Benedikt Spranger <b.spranger@linutronix.de>
> ---
> Documentation/networking/dsa/b53.rst | 300 +++++++++++++++++++++++++++
> 1 file changed, 300 insertions(+)
> create mode 100644 Documentation/networking/dsa/b53.rst
>
> diff --git a/Documentation/networking/dsa/b53.rst b/Documentation/networking/dsa/b53.rst
> new file mode 100644
> index 000000000000..5838cf6230da
> --- /dev/null
> +++ b/Documentation/networking/dsa/b53.rst
> @@ -0,0 +1,300 @@
> +.. SPDX-License-Identifier: GPL-2.0
> +
> +==========================================
> +Broadcom RoboSwitch Ethernet switch driver
> +==========================================
> +
> +The Broadcom RoboSwitch Ethernet switch family is used in quite a range of
> +xDSL router, cable modems and other multimedia devices.
> +
> +The actual implementation supports the devices BCM5325E, BCM5365, BCM539x,
> +BCM53115 and BCM53125 as well as BCM63XX.
> +
> +Implementation details
> +======================
> +
> +The driver is located in ``drivers/net/dsa/bcm_sf2.c`` and is implemented as a
> +DSA driver; see ``Documentation/networking/dsa/dsa.rst`` for details on the
> +subsystemand what it provides.
The driver is under drivers/net/dsa/b53/
s/ethernet/Ethernet/ for your global submission.
What you are describing is not entirely specific to the B53 driver
(maybe with the exception of having a VLAN tag on the DSA master network
device, since B53 puts the CPU port tagged in all VLANs by default), and
therefore the entire document should be written with the general DSA
devices in mind, and eventually pointing out where B53 differs in a
separate document.
There are largely two kinds of behavior:
- switches that are configured with DSA_TAG_PROTO_NONE, which behave in
a certain way and require a bridge with VLAN filtering even when ports
are intended to be used as standalone devices.
- switches that are configured with a tagging protocol other than
DSA_TAG_PROTO_NONE, which behave more like traditional network devices
people are used to use.
> +
> +The switch is, if possible, configured to enable a Broadcom specific 4-bytes
> +switch tag which gets inserted by the switch for every packet forwarded to the
> +CPU interface, conversely, the CPU network interface should insert a similar
> +tag for packets entering the CPU port. The tag format is described in
> +``net/dsa/tag_brcm.c``.
> +
> +The configuration of the device depends on whether or not tagging is
> +supported.
> +
> +Configuration with tagging support
> +----------------------------------
> +
> +The tagging based configuration is desired.
> +
> +To use the b53 DSA driver some configuration need to be performed. As
> +example configuration the following scenarios are used:
> +
> +*single port*
> + Every switch port acts as a different configurable ethernet port
> +
> +*bridge*
> + Every switch port is part of one configurable ethernet bridge
> +
> +*gateway*
> + Every switch port except one upstream port is part of a configurable
> + ethernet bridge.
> + The upstream port acts as different configurable ethernet port.
> +
> +All configurations are performed with tools from iproute2, wich is available at
> +https://www.kernel.org/pub/linux/utils/net/iproute2/
> +
> +In this documentation the following ethernet ports are used:
> +
> +*eth0*
> + CPU port
> +
> +*LAN1*
> + a switch port
> +
> +*LAN2*
> + another switch port
> +
> +*WAN*
> + A switch port dedicated as upstream port
> +
> +Further ethernet ports can be configured similar.
> +The configured IPs and networks are:
> +
> +*single port*
> + * wan: 192.0.2.1/30 (192.0.2.0 - 192.0.2.3)
> + * lan1: 192.0.2.5/30 (192.0.2.4 - 192.0.2.7)
> + * lan2: 192.0.2.9/30 (192.0.2.8 - 192.0.2.11)
> +
> +*bridge*
> + * br0: 192.0.2.129/25 (192.0.2.128 - 192.0.2.255)
> +
> +*gateway*
> + * br0: 192.0.2.129/25 (192.0.2.128 - 192.0.2.255)
> + * wan: 192.0.2.1/30 (192.0.2.0 - 192.0.2.3)
> +
> +single port
> +~~~~~~~~~~~
> +
> +.. code-block:: sh
> +
> + # configure each interface
> + ip addr add 192.0.2.1/30 dev wan
> + ip addr add 192.0.2.5/30 dev lan1
> + ip addr add 192.0.2.9/30 dev lan2
> +
> + # The master interface needs to be brought up before the slave ports.
> + ip link set eth0 up
> +
> + # bring up the slave interfaces
> + ip link set wan up
> + ip link set lan1 up
> + ip link set lan2 up
> +
> +bridge
> +~~~~~~
I would add something like:
All ports being part of a single bridge/broadcast domain or something
along those lines. Seeing the "wan" interface being added to a bridge is
a bit confusing.
> +
> +.. code-block:: sh
> +
> + # create bridge
> + ip link add name br0 type bridge
> +
> + # add ports to bridge
> + ip link set dev wan master br0
> + ip link set dev lan1 master br0
> + ip link set dev lan2 master br0
> +
> + # configure the bridge
> + ip addr add 192.0.2.129/25 dev br0
> +
> + # The master interface needs to be brought up before the slave ports.
> + ip link set eth0 up
> +
> + # bring up the slave interfaces
> + ip link set wan up
> + ip link set lan1 up
> + ip link set lan2 up
> +
> + # bring up the bridge
> + ip link set dev br0 up
> +
> +gateway
> +~~~~~~~
> +
> +.. code-block:: sh
> +
> + # create bridge
> + ip link add name br0 type bridge
> +
> + # add ports to bridge
> + ip link set dev lan1 master br0
> + ip link set dev lan2 master br0
> +
> + # configure the bridge
> + ip addr add 192.0.2.129/25 dev br0
> +
> + # configure the upstream port
> + ip addr add 192.0.2.1/30 dev wan
> +
> + # The master interface needs to be brought up before the slave ports.
> + ip link set eth0 up
> +
> + # bring up the slave interfaces
> + ip link set wan up
> + ip link set lan1 up
> + ip link set lan2 up
> +
> + # bring up the bridge
> + ip link set dev br0 up
> +
> +Configuration without tagging support
> +-------------------------------------
> +
> +Older models (5325, 5365) support a different tag format that is not supported
> +yet. 539x and 531x5 require managed mode and some special handling, which is
> +also not yet supported. The tagging support is disabled in these cases and the
> +switch need a different configuration.
On that topic, did the patch I sent you ended up working the way you
wanted it with ifupdown-scripts or are you still chasing some other
issues with it?
> +
> +single port
> +~~~~~~~~~~~
> +The configuration can only be set up via VLAN tagging and bridge setup.
> +By default packages are tagged with vid 1:
> +
> +.. code-block:: sh
> +
> + # tag traffic on CPU port
> + ip link add link eth0 name eth0.1 type vlan id 1
> + ip link add link eth0 name eth0.2 type vlan id 2
> + ip link add link eth0 name eth0.3 type vlan id 3
That part is indeed a B53 implementation specific detail because B53
tags the CPU port in all VLANs, since otherwise any PVID untagged VLAN
programming would basically change the CPU port's default PVID and make
it untagged, undesirable.
> +
> + # create bridges
> + ip link add name br0 type bridge
> + ip link add name br1 type bridge
> + ip link add name br2 type bridge
> +
> + # activate VLAN filtering
> + ip link set dev br0 type bridge vlan_filtering 1
> + ip link set dev br1 type bridge vlan_filtering 1
> + ip link set dev br2 type bridge vlan_filtering 1
> +
> + # add ports to bridges
> + ip link set dev wan master br0
> + ip link set eth0.1 master br0
> + ip link set dev lan1 master br1
> + ip link set eth0.2 master br1
> + ip link set dev lan2 master br2
> + ip link set eth0.3 master br2
I don't think you need one bridge for each port you want to isolate with
DSA_PROTO_TAG_NONE, you can just have a single bridge and assign the
ports a different VLAN with the commands below:
> +
> + # tag traffic on ports
> + bridge vlan add dev lan1 vid 2 pvid untagged
> + bridge vlan del dev lan1 vid 1
> + bridge vlan add dev lan2 vid 3 pvid untagged
> + bridge vlan del dev lan2 vid 1
And also permit the different VLANs that you created on the bridge
master device itself:
bridge vlan add vid 2 dev br0 self
bridve vlan add vid 3 dev br0 self
Maybe that last part above ^^ was missing and that's why people tend to
create multiple bridge devices?
> +
> + # configure the bridges
> + ip addr add 192.0.2.1/30 dev br0
> + ip addr add 192.0.2.5/30 dev br1
> + ip addr add 192.0.2.9/30 dev br2
> +
> + # The master interface needs to be brought up before the slave ports.
> + ip link set eth0 up
> + ip link set eth0.1 up
> + ip link set eth0.2 up
> + ip link set eth0.3 up
> +
> + # bring up the slave interfaces
> + ip link set wan up
> + ip link set lan1 up
> + ip link set lan2 up
> +
> + # bring up the bridge devices
> + ip link set br0 up
> + ip link set br1 up
> + ip link set br2 up
> +
> +bridge
> +~~~~~~
> +
> +.. code-block:: sh
> +
> + # tag traffic on CPU port
> + ip link add link eth0 name eth0.1 type vlan id 1
> +
> + # create bridge
> + ip link add name br0 type bridge
> +
> + # activate VLAN filtering
> + ip link set dev br0 type bridge vlan_filtering 1
> +
> + # add ports to bridge
> + ip link set dev wan master br0
> + ip link set dev lan1 master br0
> + ip link set dev lan2 master br0
> + ip link set eth0.1 master br0
> +
> + # configure the bridge
> + ip addr add 192.0.2.129/25 dev br0
> +
> + # The master interface needs to be brought up before the slave ports.
> + ip link set eth0 up
> + ip link set eth0.1 up
> +
> + # bring up the slave interfaces
> + ip link set wan up
> + ip link set lan1 up
> + ip link set lan2 up
> +
> + # bring up the bridge
> + ip link set dev br0 up
> +
> +gateway
> +~~~~~~~
> +
> +.. code-block:: sh
> +
> + # tag traffic on CPU port
> + ip link add link eth0 name eth0.1 type vlan id 1
> + ip link add link eth0 name eth0.2 type vlan id 2
> +
> + # create bridges
> + ip link add name br0 type bridge
> + ip link add name br1 type bridge
Likewise, I have seen claims of people telling me they used two bridge
devices, but AFAICT this is only because the bridge master did not have
VID 2 programmed to it, so if you did the following:
bridge vlan add vid 2 dev br0 self
you should be able to get away with a single bridge master device, can
you try that?
Overall this is fills a lot of gaps and questions that were being asked
on the lamobo R1 threads on various forums, thanks a lot for doing that!
--
Florian
^ permalink raw reply
* Re: [PATCH bpf-next 1/4] bpf: unprivileged BPF access via /dev/bpf
From: Greg KH @ 2019-06-27 16:37 UTC (permalink / raw)
To: Song Liu
Cc: Daniel Borkmann, Networking, bpf, Alexei Starovoitov, Kernel Team,
jannh@google.com
In-Reply-To: <94404006-0D7E-4226-9167-B1DFAF7FEB2A@fb.com>
On Thu, Jun 27, 2019 at 01:00:03AM +0000, Song Liu wrote:
>
>
> > On Jun 26, 2019, at 5:08 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
> >
> > On Wed, Jun 26, 2019 at 03:17:47PM +0000, Song Liu wrote:
> >>>> +static struct miscdevice bpf_dev = {
> >>>> + .minor = MISC_DYNAMIC_MINOR,
> >>>> + .name = "bpf",
> >>>> + .fops = &bpf_chardev_ops,
> >>>> + .mode = 0440,
> >>>> + .nodename = "bpf",
> >>>
> >>> Here's what kvm does:
> >>>
> >>> static struct miscdevice kvm_dev = {
> >>> KVM_MINOR,
> >>> "kvm",
> >>> &kvm_chardev_ops,
> >>> };
> >
> > Ick, I thought we converted all of these to named initializers a long
> > time ago :)
> >
> >>> Is there an actual reason that mode is not 0 by default in bpf case? Why
> >>> we need to define nodename?
> >>
> >> Based on my understanding, mode of 0440 is what we want. If we leave it
> >> as 0, it will use default value of 0600. I guess we can just set it to
> >> 0440, as user space can change it later anyway.
> >
> > Don't rely on userspace changing it, set it to what you want the
> > permissions to be in the kernel here, otherwise you have to create a new
> > udev rule and get it merged into all of the distros. Just do it right
> > the first time and there is no need for it.
> >
> > What is wrong with 0600 for this? Why 0440?
>
> We would like root to own the device, and let users in a certain group
> to be able to open it. So 0440 is what we need.
But you are doing a "write" ioctl here, right? So don't you really need
0660 at the least? And if you "know" the group id, I think you can
specify it too so udev doesn't have to do a ton of work, but that only
works for groups that all distros number the same.
And why again is this an ioctl instead of a syscall? What is so magic
about the file descriptor here?
thanks
greg k-h
^ permalink raw reply
* [PATCH V4] bnx2x: Prevent ptp_task to be rescheduled indefinitely
From: Guilherme G. Piccoli @ 2019-06-27 16:31 UTC (permalink / raw)
To: GR-everest-linux-l2, netdev, skalluru; +Cc: aelior, gpiccoli, jay.vosburgh
Currently bnx2x ptp worker tries to read a register with timestamp
information in case of TX packet timestamping and in case it fails,
the routine reschedules itself indefinitely. This was reported as a
kworker always at 100% of CPU usage, which was narrowed down to be
bnx2x ptp_task.
By following the ioctl handler, we could narrow down the problem to
an NTP tool (chrony) requesting HW timestamping from bnx2x NIC with
RX filter zeroed; this isn't reproducible for example with ptp4l
(from linuxptp) since this tool requests a supported RX filter.
It seems NIC FW timestamp mechanism cannot work well with
RX_FILTER_NONE - driver's PTP filter init routine skips a register
write to the adapter if there's not a supported filter request.
This patch addresses the problem of bnx2x ptp thread's everlasting
reschedule by retrying the register read 10 times; between the read
attempts the thread sleeps for an increasing amount of time starting
in 1ms to give FW some time to perform the timestamping. If it still
fails after all retries, we bail out in order to prevent an unbound
resource consumption from bnx2x.
The patch also adds an ethtool statistic for accounting the skipped
TX timestamp packets and it reduces the priority of timestamping
error messages to prevent log flooding. The code was tested using
both linuxptp and chrony.
Reported-and-tested-by: Przemyslaw Hausman <przemyslaw.hausman@canonical.com>
Suggested-by: Sudarsana Reddy Kalluru <skalluru@marvell.com>
Signed-off-by: Guilherme G. Piccoli <gpiccoli@canonical.com>
---
Thanks again for your review Sudarsana. I've addressed in this V4
your suggestions about removing some debug messages[0].
[0] https://marc.info/?l=linux-netdev&m=156165243804760
.../net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 5 ++-
.../ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 4 ++-
.../net/ethernet/broadcom/bnx2x/bnx2x_main.c | 33 ++++++++++++++-----
.../net/ethernet/broadcom/bnx2x/bnx2x_stats.h | 3 ++
4 files changed, 34 insertions(+), 11 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index 008ad0ca89ba..c12c1bab0fe4 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -3857,9 +3857,12 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
if (!(bp->flags & TX_TIMESTAMPING_EN)) {
+ bp->eth_stats.ptp_skip_tx_ts++;
BNX2X_ERR("Tx timestamping was not enabled, this packet will not be timestamped\n");
} else if (bp->ptp_tx_skb) {
- BNX2X_ERR("The device supports only a single outstanding packet to timestamp, this packet will not be timestamped\n");
+ bp->eth_stats.ptp_skip_tx_ts++;
+ netdev_err_once(bp->dev,
+ "Device supports only a single outstanding packet to timestamp, this packet won't be timestamped\n");
} else {
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
/* schedule check for Tx timestamp */
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
index 51fc845de31a..4a0ba6801c9e 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
@@ -182,7 +182,9 @@ static const struct {
{ STATS_OFFSET32(driver_filtered_tx_pkt),
4, false, "driver_filtered_tx_pkt" },
{ STATS_OFFSET32(eee_tx_lpi),
- 4, true, "Tx LPI entry count"}
+ 4, true, "Tx LPI entry count"},
+ { STATS_OFFSET32(ptp_skip_tx_ts),
+ 4, false, "ptp_skipped_tx_tstamp" },
};
#define BNX2X_NUM_STATS ARRAY_SIZE(bnx2x_stats_arr)
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 03ac10b1cd1e..2cc14db8f0ec 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -15214,11 +15214,24 @@ static void bnx2x_ptp_task(struct work_struct *work)
u32 val_seq;
u64 timestamp, ns;
struct skb_shared_hwtstamps shhwtstamps;
+ bool bail = true;
+ int i;
- /* Read Tx timestamp registers */
- val_seq = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_SEQID :
- NIG_REG_P0_TLLH_PTP_BUF_SEQID);
- if (val_seq & 0x10000) {
+ /* FW may take a while to complete timestamping; try a bit and if it's
+ * still not complete, may indicate an error state - bail out then.
+ */
+ for (i = 0; i < 10; i++) {
+ /* Read Tx timestamp registers */
+ val_seq = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_SEQID :
+ NIG_REG_P0_TLLH_PTP_BUF_SEQID);
+ if (val_seq & 0x10000) {
+ bail = false;
+ break;
+ }
+ msleep(1 << i);
+ }
+
+ if (!bail) {
/* There is a valid timestamp value */
timestamp = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_TS_MSB :
NIG_REG_P0_TLLH_PTP_BUF_TS_MSB);
@@ -15233,16 +15246,18 @@ static void bnx2x_ptp_task(struct work_struct *work)
memset(&shhwtstamps, 0, sizeof(shhwtstamps));
shhwtstamps.hwtstamp = ns_to_ktime(ns);
skb_tstamp_tx(bp->ptp_tx_skb, &shhwtstamps);
- dev_kfree_skb_any(bp->ptp_tx_skb);
- bp->ptp_tx_skb = NULL;
DP(BNX2X_MSG_PTP, "Tx timestamp, timestamp cycles = %llu, ns = %llu\n",
timestamp, ns);
} else {
- DP(BNX2X_MSG_PTP, "There is no valid Tx timestamp yet\n");
- /* Reschedule to keep checking for a valid timestamp value */
- schedule_work(&bp->ptp_task);
+ DP(BNX2X_MSG_PTP,
+ "Tx timestamp is not recorded (register read=%u)\n",
+ val_seq);
+ bp->eth_stats.ptp_skip_tx_ts++;
}
+
+ dev_kfree_skb_any(bp->ptp_tx_skb);
+ bp->ptp_tx_skb = NULL;
}
void bnx2x_set_rx_ts(struct bnx2x *bp, struct sk_buff *skb)
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
index b2644ed13d06..d55e63692cf3 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
@@ -207,6 +207,9 @@ struct bnx2x_eth_stats {
u32 driver_filtered_tx_pkt;
/* src: Clear-on-Read register; Will not survive PMF Migration */
u32 eee_tx_lpi;
+
+ /* PTP */
+ u32 ptp_skip_tx_ts;
};
struct bnx2x_eth_q_stats {
--
2.22.0
^ permalink raw reply related
* Re: [PATCH bpf-next v9 05/10] bpf,landlock: Add a new map type: inode
From: Mickaël Salaün @ 2019-06-27 16:18 UTC (permalink / raw)
To: Al Viro, Mickaël Salaün
Cc: linux-kernel, Aleksa Sarai, Alexei Starovoitov, Andrew Morton,
Andy Lutomirski, Arnaldo Carvalho de Melo, Casey Schaufler,
Daniel Borkmann, David Drysdale, David S . Miller,
Eric W . Biederman, James Morris, Jann Horn, John Johansen,
Jonathan Corbet, Kees Cook, Michael Kerrisk, Paul Moore,
Sargun Dhillon, Serge E . Hallyn, Shuah Khan, Stephen Smalley,
Tejun Heo, Tetsuo Handa, Thomas Graf, Tycho Andersen, Will Drewry,
kernel-hardening, linux-api, linux-fsdevel, linux-security-module,
netdev
In-Reply-To: <20190625225201.GJ17978@ZenIV.linux.org.uk>
On 26/06/2019 00:52, Al Viro wrote:
> On Tue, Jun 25, 2019 at 11:52:34PM +0200, Mickaël Salaün wrote:
>> +/* must call iput(inode) after this call */
>> +static struct inode *inode_from_fd(int ufd, bool check_access)
>> +{
>> + struct inode *ret;
>> + struct fd f;
>> + int deny;
>> +
>> + f = fdget(ufd);
>> + if (unlikely(!f.file || !file_inode(f.file))) {
>> + ret = ERR_PTR(-EBADF);
>> + goto put_fd;
>> + }
>
> Just when does one get a NULL file_inode()? The reason I'm asking is
> that arseloads of code would break if one managed to create such
> a beast...
I didn't find any API documentation about this guarantee, so I followed
a defensive programming approach. I'll remove the file_inode() check.
>
> Incidentally, that should be return ERR_PTR(-EBADF); fdput() is wrong there.
Right, I'll fix that.
>
>> + }
>> + /* check if the FD is tied to a mount point */
>> + /* TODO: add this check when called from an eBPF program too */
>> + if (unlikely(!f.file->f_path.mnt
>
> Again, the same question - when the hell can that happen?
Defensive programming again, I'll remove it.
> If you are
> sitting on an exploitable roothole, do share it...
>
> || f.file->f_path.mnt->mnt_flags &
>> + MNT_INTERNAL)) {
>> + ret = ERR_PTR(-EINVAL);
>> + goto put_fd;
>
> What does it have to do with mountpoints, anyway?
I want to only manage inodes tied to a userspace-visible file system
(this check may not be enough though). It doesn't make sense to be able
to add inodes which are not mounted, to this kind of map.
>
>> +/* called from syscall */
>> +static int sys_inode_map_delete_elem(struct bpf_map *map, struct inode *key)
>> +{
>> + struct inode_array *array = container_of(map, struct inode_array, map);
>> + struct inode *inode;
>> + int i;
>> +
>> + WARN_ON_ONCE(!rcu_read_lock_held());
>> + for (i = 0; i < array->map.max_entries; i++) {
>> + if (array->elems[i].inode == key) {
>> + inode = xchg(&array->elems[i].inode, NULL);
>> + array->nb_entries--;
>
> Umm... Is that intended to be atomic in any sense?
nb_entries is not used as a bound check but to avoid walking uselessly
through the (pre-allocated) array when adding a new element, but I'll
use an atomic to avoid inconsistencies anyway.
>
>> + iput(inode);
>> + return 0;
>> + }
>> + }
>> + return -ENOENT;
>> +}
>> +
>> +/* called from syscall */
>> +int bpf_inode_map_delete_elem(struct bpf_map *map, int *key)
>> +{
>> + struct inode *inode;
>> + int err;
>> +
>> + inode = inode_from_fd(*key, false);
>> + if (IS_ERR(inode))
>> + return PTR_ERR(inode);
>> + err = sys_inode_map_delete_elem(map, inode);
>> + iput(inode);
>> + return err;
>> +}
>
> Wait a sec... So we have those beasties that can have long-term
> references to arbitrary inodes stuck in them? What will happen
> if you get umount(2) called while such a thing exists?
I though an umount would be denied but no, we get a self-destructed busy
inode and a bug!
What about wrapping the inode's superblock->s_op->destroy_inode() to
first remove the element from the map and then call the real
destroy_inode(), if any?
Or I could update fs/inode.c:destroy_inode() to call inode->free_inode()
if it is set, and set it when such inode is referenced by a map?
Or maybe I could hold the referencing file in the map and then wrap its
f_op?
--
Mickaël Salaün
ANSSI/SDE/ST/LAM
Les données à caractère personnel recueillies et traitées dans le cadre de cet échange, le sont à seule fin d’exécution d’une relation professionnelle et s’opèrent dans cette seule finalité et pour la durée nécessaire à cette relation. Si vous souhaitez faire usage de vos droits de consultation, de rectification et de suppression de vos données, veuillez contacter contact.rgpd@sgdsn.gouv.fr. Si vous avez reçu ce message par erreur, nous vous remercions d’en informer l’expéditeur et de détruire le message. The personal data collected and processed during this exchange aims solely at completing a business relationship and is limited to the necessary duration of that relationship. If you wish to use your rights of consultation, rectification and deletion of your data, please contact: contact.rgpd@sgdsn.gouv.fr. If you have received this message in error, we thank you for informing the sender and destroying the message.
^ permalink raw reply
* Re: [Linux-kernel-mentees][PATCH v2] packet: Fix undefined behavior in bit shift
From: David Miller @ 2019-06-27 16:22 UTC (permalink / raw)
To: skhan; +Cc: c0d1n61at3, linux-kernel-mentees, netdev, linux-kernel
In-Reply-To: <7f6f44b2-3fe4-85f6-df3c-ad59f2eadba2@linuxfoundation.org>
From: Shuah Khan <skhan@linuxfoundation.org>
Date: Wed, 26 Jun 2019 21:32:52 -0600
> On 6/26/19 9:25 PM, Jiunn Chang wrote:
>> Shifting signed 32-bit value by 31 bits is undefined. Changing most
>> significant bit to unsigned.
>> Changes included in v2:
>> - use subsystem specific subject lines
>> - CC required mailing lists
>>
>
> These version change lines don't belong in the change log.
For networking changes I actually like the change lines to be in the
commit log. So please don't stray people this way, thanks.
^ permalink raw reply
* Re: [PATCH net] sctp: not bind the socket in sctp_connect
From: David Miller @ 2019-06-27 16:21 UTC (permalink / raw)
To: marcelo.leitner; +Cc: lucien.xin, netdev, linux-sctp, nhorman, syzkaller-bugs
In-Reply-To: <20190627025915.GA2747@localhost.localdomain>
From: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Date: Wed, 26 Jun 2019 23:59:15 -0300
> Please give me another day to review this one. Thanks.
Sure, no problem.
^ permalink raw reply
* Re: [EXT] [PATCH V3] bnx2x: Prevent ptp_task to be rescheduled indefinitely
From: Guilherme G. Piccoli @ 2019-06-27 16:20 UTC (permalink / raw)
To: Sudarsana Reddy Kalluru
Cc: GR-everest-linux-l2, netdev@vger.kernel.org, Ariel Elior,
jay.vosburgh@canonical.com
In-Reply-To: <MN2PR18MB2528E0CB660FC35C475816E1D3FD0@MN2PR18MB2528.namprd18.prod.outlook.com>
Thanks again Sudarsana for the good review and advice. I'll send V4 soon.
Discussions about your points are in-line below:
On 27/06/2019 07:09, Sudarsana Reddy Kalluru wrote:
>
>> [...]
>> if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
>> if (!(bp->flags & TX_TIMESTAMPING_EN)) {
>> - BNX2X_ERR("Tx timestamping was not enabled, this
>> packet will not be timestamped\n");
>> + bp->eth_stats.ptp_skip_tx_ts++;
>> + netdev_err_once(bp->dev,
>> + "Tx timestamping isn't enabled, this
>> packet won't be timestamped\n");
>> + DP(BNX2X_MSG_PTP,
>> + "Tx timestamping isn't enabled, this packet won't
>> be
>> +timestamped\n");
>
> Hitting this path is very unlikely and also PTP packets arrive once in a second in general.
> Either retain BNX2X_ERR() statement or remove the extra call netdev_err_once().
Agreed, I retained BNX2X_ERR().
>
>> } else if (bp->ptp_tx_skb) {
>> - BNX2X_ERR("The device supports only a single
>> outstanding packet to timestamp, this packet will not be timestamped\n");
>> + bp->eth_stats.ptp_skip_tx_ts++;
>> + netdev_err_once(bp->dev,
>> + "Device supports only a single
>> outstanding packet to timestamp, this packet won't be timestamped\n");
>> + DP(BNX2X_MSG_PTP,
>> + "Device supports only a single outstanding packet to
>> timestamp,
>> +this packet won't be timestamped\n");
> Same as above.
Now this one I disagree - it's easy to have kernel log flooded by these
messages if, for instance, you reproduce the bug I'm trying to fix.
Even with my patch, the register value is 0x0 in TX timestamping read,
so this is likely to keep showing in the kernel, and may cause a
somewhat quick log rotation depending on user configuration.
For this one, I've removed the debug statement, but kept netdev_err_once
to warn users that something is wrong without slowly flood their logs.
If the users want more detail, they just need to enable debug level
logging in bnx2x. Makes sense to you?
>> } else {
>> skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
>> /* schedule check for Tx timestamp */ diff --git
>> a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
>> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
>> index 51fc845de31a..4a0ba6801c9e 100644
>> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
>> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
>> @@ -182,7 +182,9 @@ static const struct {
>> { STATS_OFFSET32(driver_filtered_tx_pkt),
>> 4, false, "driver_filtered_tx_pkt" },
>> { STATS_OFFSET32(eee_tx_lpi),
>> - 4, true, "Tx LPI entry count"}
>> + 4, true, "Tx LPI entry count"},
>> + { STATS_OFFSET32(ptp_skip_tx_ts),
>> + 4, false, "ptp_skipped_tx_tstamp" },
>> };
>>
>> #define BNX2X_NUM_STATS ARRAY_SIZE(bnx2x_stats_arr)
>> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
>> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
>> index 03ac10b1cd1e..af6e7a950a28 100644
>> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
>> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
>> @@ -15214,11 +15214,27 @@ static void bnx2x_ptp_task(struct work_struct
>> *work)
>> u32 val_seq;
>> u64 timestamp, ns;
>> struct skb_shared_hwtstamps shhwtstamps;
>> + bool bail = true;
>> + int i;
>>
>> - /* Read Tx timestamp registers */
>> - val_seq = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_SEQID :
>> - NIG_REG_P0_TLLH_PTP_BUF_SEQID);
>> - if (val_seq & 0x10000) {
>> + /* FW may take a while to complete timestamping; try a bit and if it's
>> + * still not complete, may indicate an error state - bail out then.
>> + */
>> + for (i = 0; i < 10; i++) {
>> + /* Read Tx timestamp registers */
>> + val_seq = REG_RD(bp, port ?
>> NIG_REG_P1_TLLH_PTP_BUF_SEQID :
>> + NIG_REG_P0_TLLH_PTP_BUF_SEQID);
>> + if (val_seq & 0x10000) {
>> + bail = false;
>> + break;
>> + }
>> +
>> + if (!(i % 4)) /* Avoid log flood */
>> + DP(BNX2X_MSG_PTP, "There's no valid Tx timestamp
>> yet\n");
> This debug statement is not required as we anyway capture it in the error path below.
>
Ack, removed.
>> + msleep(1 << i);
>> + }
>> +
>> + if (!bail) {
>> /* There is a valid timestamp value */
>> timestamp = REG_RD(bp, port ?
>> NIG_REG_P1_TLLH_PTP_BUF_TS_MSB :
>> NIG_REG_P0_TLLH_PTP_BUF_TS_MSB);
>> @@ -15233,16 +15249,18 @@ static void bnx2x_ptp_task(struct work_struct
>> *work)
>> memset(&shhwtstamps, 0, sizeof(shhwtstamps));
>> shhwtstamps.hwtstamp = ns_to_ktime(ns);
>> skb_tstamp_tx(bp->ptp_tx_skb, &shhwtstamps);
>> - dev_kfree_skb_any(bp->ptp_tx_skb);
>> - bp->ptp_tx_skb = NULL;
>>
>> DP(BNX2X_MSG_PTP, "Tx timestamp, timestamp cycles =
>> %llu, ns = %llu\n",
>> timestamp, ns);
>> } else {
>> - DP(BNX2X_MSG_PTP, "There is no valid Tx timestamp
>> yet\n");
>> - /* Reschedule to keep checking for a valid timestamp value
>> */
>> - schedule_work(&bp->ptp_task);
>> + DP(BNX2X_MSG_PTP,
>> + "Tx timestamp is not recorded (register read=%u)\n",
>> + val_seq);
>> + bp->eth_stats.ptp_skip_tx_ts++;
>> }
>> +
>> + dev_kfree_skb_any(bp->ptp_tx_skb);
>> + bp->ptp_tx_skb = NULL;
>> }
>>
>> void bnx2x_set_rx_ts(struct bnx2x *bp, struct sk_buff *skb) diff --git
>> a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
>> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
>> index b2644ed13d06..d55e63692cf3 100644
>> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
>> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
>> @@ -207,6 +207,9 @@ struct bnx2x_eth_stats {
>> u32 driver_filtered_tx_pkt;
>> /* src: Clear-on-Read register; Will not survive PMF Migration */
>> u32 eee_tx_lpi;
>> +
>> + /* PTP */
>> + u32 ptp_skip_tx_ts;
> The value need to be cleared in the case of internal reload e.g., mtu change, ifconfig-down/up.
> If this is not happening, please reset it in the nic load path.
I mostly agree with you here. The stat really needs to be zeroed in
interface reload, and it is, currently.
The path doing this on driver is:
bnx2x_nic_load()
bnx2x_post_irq_nic_init()
bnx2x_stats_init()
I've tested that using "ifconfig <iface> down" and then up. The
"ptp_skip_tx_ts" was zeroed. But for example, in MTU change it kept its
value, which I consider right. We don't want a MTU change to clear
stats, in my understanding.
The driver is behaving right IMO, what governs the reset of statistics
is "bp->stats_init", which is set in bnx2x_open(), leading to full stats
reset.
I've checked and the behavior is the same for other statistics like
rx_bytes (both per-queue and accumulated) and tx_*_packets.
If you consider this behavior as wrong we can fix that in another patch,
or if you think for some reason "ptp_skip_tx_ts" should behave
differently from the other statistics, let me know.
Thanks,
Guilherme
>
>> };
>>
>> struct bnx2x_eth_q_stats {
>> --
>> 2.22.0
>
^ permalink raw reply
* Re: [PATCH net-next v3 1/4] net: sched: em_ipt: match only on ip/ipv6 traffic
From: nikolay @ 2019-06-27 16:13 UTC (permalink / raw)
To: Eyal Birger; +Cc: netdev, roopa, davem, pablo, xiyou.wangcong, jiri, jhs
In-Reply-To: <20190627190237.0a08a4a2@jimi>
On 27 June 2019 19:02:37 EEST, Eyal Birger <eyal.birger@gmail.com> wrote:
>Hi Nik,
>
>On Thu, 27 Jun 2019 11:10:44 +0300
>Nikolay Aleksandrov <nikolay@cumulusnetworks.com> wrote:
>
>> Restrict matching only to ip/ipv6 traffic and make sure we can use
>the
>> headers, otherwise matches will be attempted on any protocol which
>can
>> be unexpected by the xt matches. Currently policy supports only
>> ipv4/6.
>>
>> Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
>> ---
>> v3: no change
>> v2: no change
>>
>> net/sched/em_ipt.c | 13 +++++++++++++
>> 1 file changed, 13 insertions(+)
>>
>> diff --git a/net/sched/em_ipt.c b/net/sched/em_ipt.c
>> index 243fd22f2248..64dbafe4e94c 100644
>> --- a/net/sched/em_ipt.c
>> +++ b/net/sched/em_ipt.c
>> @@ -185,6 +185,19 @@ static int em_ipt_match(struct sk_buff *skb,
>> struct tcf_ematch *em, struct nf_hook_state state;
>> int ret;
>>
>> + switch (tc_skb_protocol(skb)) {
>> + case htons(ETH_P_IP):
>> + if (!pskb_network_may_pull(skb, sizeof(struct
>> iphdr)))
>> + return 0;
>> + break;
>> + case htons(ETH_P_IPV6):
>> + if (!pskb_network_may_pull(skb, sizeof(struct
>> ipv6hdr)))
>> + return 0;
>> + break;
>> + default:
>> + return 0;
>> + }
>> +
>
>I just realized that I didn't consider the egress direction in my
>review.
>Don't we need an skb_pull() in that direction to make the skb->data
>point
>to L3? I see this is done e.g. in em_ipset.
>
>Eyal.
Hi Eyal,
Not for addrtype, it doesn't have such expectations.
I also tested it, everything matches properly.
Cheers,
Nik
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox