All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xiaomeng Tong <xiam0nd.tong@gmail.com>
To: daniel.thompson@linaro.org
Cc: akpm@linux-foundation.org, alsa-devel@alsa-project.org,
	amd-gfx@lists.freedesktop.org, andriy.shevchenko@linux.intel.com,
	arnd@arndb.de, bcm-kernel-feedback-list@broadcom.com,
	bjohannesmeyer@gmail.com, c.giuffrida@vu.nl,
	christian.koenig@amd.com, christophe.jaillet@wanadoo.fr,
	dan.carpenter@oracle.com, david.laight@aculab.com,
	dmaengine@vger.kernel.org, drbd-dev@lists.linbit.com,
	dri-devel@lists.freedesktop.org, gustavo@embeddedor.com,
	h.j.bos@vu.nl, intel-gfx@lists.freedesktop.org,
	intel-wired-lan@lists.osuosl.org, jakobkoschel@gmail.com,
	jgg@ziepe.ca, keescook@chromium.org,
	kgdb-bugreport@lists.sourceforge.net, kvm@vger.kernel.org,
	linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-aspeed@lists.ozlabs.org, linux-block@vger.kernel.org,
	linux-cifs@vger.kernel.org, linux-crypto@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net,
	linux-fsdevel@vger.kernel.org, linux-iio@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
	linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org,
	linux-rdma@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-sgx@vger.kernel.org, linux-staging@lists.linux.dev,
	linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux@rasmusvillemoes.dk,
	linuxppc-dev@lists.ozlabs.org, nathan@kernel.org,
	netdev@vger.kernel.org, nouveau@lists.freedesktop.org,
	rppt@kernel.org, samba-technical@lists.samba.org,
	tglx@linutronix.de, tipc-discussion@lists.sourceforge.net,
	torvalds@linux-foundation.org,
	v9fs-developer@lists.sourceforge.net, xiam0nd.tong@gmail.com
Subject: Re: [PATCH 2/6] treewide: remove using list iterator after loop body as a ptr
Date: Fri,  4 Mar 2022 14:59:57 +0800	[thread overview]
Message-ID: <20220304065957.16799-1-xiam0nd.tong@gmail.com> (raw)
In-Reply-To: <20220303121824.qdyrognluik74iph@maple.lan>

On Thu, 3 Mar 2022 12:18:24 +0000, Daniel Thompson wrote:
> On Thu, Mar 03, 2022 at 03:26:57PM +0800, Xiaomeng Tong wrote:
> > On Thu, 3 Mar 2022 04:58:23 +0000, David Laight wrote:
> > > on 3 Mar 2022 10:27:29 +0800, Xiaomeng Tong wrote:
> > > > The problem is the mis-use of iterator outside the loop on exit, and
> > > > the iterator will be the HEAD's container_of pointer which pointers
> > > > to a type-confused struct. Sidenote: The *mis-use* here refers to
> > > > mistakely access to other members of the struct, instead of the
> > > > list_head member which acutally is the valid HEAD.
> > >
> > > The problem is that the HEAD's container_of pointer should never
> > > be calculated at all.
> > > This is what is fundamentally broken about the current definition.
> > 
> > Yes, the rule is "the HEAD's container_of pointer should never be
> > calculated at all outside the loop", but how do you make sure everyone
> > follows this rule?
> 
> Your formulation of the rule is correct: never run container_of() on HEAD
> pointer.

Actually, it is not my rule. My rule is that never access other members
of the struct except for the list_head member after the loop, because
this is a invalid member after loop exit, but valid for the list_head
member which just is HEAD and the lately caculation (&pos->head) seems
harmless.

I have considered the case that the HEAD's container "pos" is layouted
across the max and the min address boundary, which means the address of
HEAD is likely 0x60, and the address of pos is likely 0xffffffe0.
It seems ok to caculate pos with:
((type *)(__mptr - offsetof(type, member)));
and it seems ok to caculate head outside the loop with:
if (&pos->head == &HEAD)
    return NULL;

The only case I can think of with the rule "never run container_of()
on HEAD" must be followed is when the first argument (which is &HEAD)
passing to container_of() is NULL + some offset, it may lead to the
resulting "pos->member" access being a NULL dereference. But maybe
the caller can take the responsibility to check if it is NULL, not
container_of() itself.

Please remind me if i missed somthing, thanks.

> 
> However the rule that is introduced by list_for_each_entry_inside() is
> *not* this rule. The rule it introduces is: never access the iterator
> variable outside the loop.

Sorry for the confusion, indeed, that is two *different* rule.

> 
> Making the iterator NULL on loop exit does follow the rule you proposed
> but using a different technique: do not allow HEAD to be stored in the
> iterator variable after loop exit. This also makes it impossible to run
> container_of() on the HEAD pointer.
> 

It does not. My rule is: never access the iterator variable outside the loop.
The "Making the iterator NULL on loop exit" way still leak the pos with NULL
outside the loop, may lead to a NULL deference.

> 
> > Everyone makes mistakes, but we can eliminate them all from the beginning
> > with the help of compiler which can catch such use-after-loop things.
> 
> Indeed but if we introduce new interfaces then we don't have to worry
> about existing usages and silent regressions. Code will have been
> written knowing the loop can exit with the iterator set to NULL.

Yes, it is more simple and compatible with existing interfaces. Howerver,
you should make every developers to remember that "pos will be set NULL on
loop exit", which is unreasonable and impossible for *every* single person.
Otherwise the mis-use-after-loop will lead to a NULL dereference.
But we can kill this problem by declaring iterator inside the loop and the
complier will catch it if somebody mis-use-after-loop.

> 
> Sure it is still possible for programmers to make mistakes and
> dereference the NULL pointer but C programmers are well training w.r.t.
> NULL pointer checking so such mistakes are much less likely than with
> the current list_for_each_entry() macro. This risk must be offset
> against the way a NULLify approach can lead to more elegant code when we
> are doing a list search.
> 

Yes, the NULLify approach is better than the current list_for_each_entry()
macro, but i stick with that the list_for_each_entry_inside() way is best
and perfect _technically_.

Thus, my idea is *better a finger off than always aching*, let's settle this
damn problem once and for all, with list_for_each_entry_inside().

--
Xiaomeng Tong

WARNING: multiple messages have this Message-ID (diff)
From: Xiaomeng Tong <xiam0nd.tong@gmail.com>
To: daniel.thompson@linaro.org
Cc: alsa-devel@alsa-project.org, kvm@vger.kernel.org,
	gustavo@embeddedor.com, linux-iio@vger.kernel.org,
	kgdb-bugreport@lists.sourceforge.net, linux@rasmusvillemoes.dk,
	dri-devel@lists.freedesktop.org, c.giuffrida@vu.nl,
	amd-gfx@lists.freedesktop.org, torvalds@linux-foundation.org,
	samba-technical@lists.samba.org,
	linux1394-devel@lists.sourceforge.net, drbd-dev@lists.linbit.com,
	linux-arch@vger.kernel.org, linux-cifs@vger.kernel.org,
	linux-aspeed@lists.ozlabs.org, linux-scsi@vger.kernel.org,
	linux-rdma@vger.kernel.org, linux-staging@lists.linux.dev,
	h.j.bos@vu.nl, jgg@ziepe.ca, intel-wired-lan@lists.osuosl.org,
	nouveau@lists.freedesktop.org,
	bcm-kernel-feedback-list@broadcom.com, dan.carpenter@oracle.com,
	linux-media@vger.kernel.org, keescook@chromium.org,
	arnd@arndb.de, linux-pm@vger.kernel.org,
	intel-gfx@lists.freedesktop.org, bjohannesmeyer@gmail.com,
	linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	christophe.jaillet@wanadoo.fr, jakobkoschel@gmail.com,
	v9fs-developer@lists.sourceforge.net,
	linux-tegra@vger.kernel.org, tglx@linutronix.de,
	andriy.shevchenko@linux.intel.com,
	linux-arm-kernel@lists.infradead.org, linux-sgx@vger.kernel.org,
	nathan@kernel.org, netdev@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net, xiam0nd.tong@gmail.com,
	david.laight@aculab.com, tipc-discussion@lists.sourceforge.net,
	linux-crypto@vger.kernel.org, dmaengine@vger.kernel.org,
	linux-mediatek@lists.infradead.org, akpm@linux-foundation.org,
	linuxppc-dev@lists.ozlabs.org, christian.koenig@amd.com,
	rppt@kernel.org
Subject: Re: [f2fs-dev] [PATCH 2/6] treewide: remove using list iterator after loop body as a ptr
Date: Fri,  4 Mar 2022 14:59:57 +0800	[thread overview]
Message-ID: <20220304065957.16799-1-xiam0nd.tong@gmail.com> (raw)
In-Reply-To: <20220303121824.qdyrognluik74iph@maple.lan>

On Thu, 3 Mar 2022 12:18:24 +0000, Daniel Thompson wrote:
> On Thu, Mar 03, 2022 at 03:26:57PM +0800, Xiaomeng Tong wrote:
> > On Thu, 3 Mar 2022 04:58:23 +0000, David Laight wrote:
> > > on 3 Mar 2022 10:27:29 +0800, Xiaomeng Tong wrote:
> > > > The problem is the mis-use of iterator outside the loop on exit, and
> > > > the iterator will be the HEAD's container_of pointer which pointers
> > > > to a type-confused struct. Sidenote: The *mis-use* here refers to
> > > > mistakely access to other members of the struct, instead of the
> > > > list_head member which acutally is the valid HEAD.
> > >
> > > The problem is that the HEAD's container_of pointer should never
> > > be calculated at all.
> > > This is what is fundamentally broken about the current definition.
> > 
> > Yes, the rule is "the HEAD's container_of pointer should never be
> > calculated at all outside the loop", but how do you make sure everyone
> > follows this rule?
> 
> Your formulation of the rule is correct: never run container_of() on HEAD
> pointer.

Actually, it is not my rule. My rule is that never access other members
of the struct except for the list_head member after the loop, because
this is a invalid member after loop exit, but valid for the list_head
member which just is HEAD and the lately caculation (&pos->head) seems
harmless.

I have considered the case that the HEAD's container "pos" is layouted
across the max and the min address boundary, which means the address of
HEAD is likely 0x60, and the address of pos is likely 0xffffffe0.
It seems ok to caculate pos with:
((type *)(__mptr - offsetof(type, member)));
and it seems ok to caculate head outside the loop with:
if (&pos->head == &HEAD)
    return NULL;

The only case I can think of with the rule "never run container_of()
on HEAD" must be followed is when the first argument (which is &HEAD)
passing to container_of() is NULL + some offset, it may lead to the
resulting "pos->member" access being a NULL dereference. But maybe
the caller can take the responsibility to check if it is NULL, not
container_of() itself.

Please remind me if i missed somthing, thanks.

> 
> However the rule that is introduced by list_for_each_entry_inside() is
> *not* this rule. The rule it introduces is: never access the iterator
> variable outside the loop.

Sorry for the confusion, indeed, that is two *different* rule.

> 
> Making the iterator NULL on loop exit does follow the rule you proposed
> but using a different technique: do not allow HEAD to be stored in the
> iterator variable after loop exit. This also makes it impossible to run
> container_of() on the HEAD pointer.
> 

It does not. My rule is: never access the iterator variable outside the loop.
The "Making the iterator NULL on loop exit" way still leak the pos with NULL
outside the loop, may lead to a NULL deference.

> 
> > Everyone makes mistakes, but we can eliminate them all from the beginning
> > with the help of compiler which can catch such use-after-loop things.
> 
> Indeed but if we introduce new interfaces then we don't have to worry
> about existing usages and silent regressions. Code will have been
> written knowing the loop can exit with the iterator set to NULL.

Yes, it is more simple and compatible with existing interfaces. Howerver,
you should make every developers to remember that "pos will be set NULL on
loop exit", which is unreasonable and impossible for *every* single person.
Otherwise the mis-use-after-loop will lead to a NULL dereference.
But we can kill this problem by declaring iterator inside the loop and the
complier will catch it if somebody mis-use-after-loop.

> 
> Sure it is still possible for programmers to make mistakes and
> dereference the NULL pointer but C programmers are well training w.r.t.
> NULL pointer checking so such mistakes are much less likely than with
> the current list_for_each_entry() macro. This risk must be offset
> against the way a NULLify approach can lead to more elegant code when we
> are doing a list search.
> 

Yes, the NULLify approach is better than the current list_for_each_entry()
macro, but i stick with that the list_for_each_entry_inside() way is best
and perfect _technically_.

Thus, my idea is *better a finger off than always aching*, let's settle this
damn problem once and for all, with list_for_each_entry_inside().

--
Xiaomeng Tong


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

WARNING: multiple messages have this Message-ID (diff)
From: Xiaomeng Tong <xiam0nd.tong@gmail.com>
To: daniel.thompson@linaro.org
Cc: akpm@linux-foundation.org, alsa-devel@alsa-project.org,
	amd-gfx@lists.freedesktop.org, andriy.shevchenko@linux.intel.com,
	arnd@arndb.de, bcm-kernel-feedback-list@broadcom.com,
	bjohannesmeyer@gmail.com, c.giuffrida@vu.nl,
	christian.koenig@amd.com, christophe.jaillet@wanadoo.fr,
	dan.carpenter@oracle.com, david.laight@aculab.com,
	dmaengine@vger.kernel.org, drbd-dev@lists.linbit.com,
	dri-devel@lists.freedesktop.org, gustavo@embeddedor.com,
	h.j.bos@vu.nl, intel-gfx@lists.freedesktop.org,
	intel-wired-lan@lists.osuosl.org, jakobkoschel@gmail.com,
	jgg@ziepe.ca, keescook@chromium.org,
	kgdb-bugreport@lists.sourceforge.net, kvm@vger.kernel.org,
	linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-aspeed@lists.ozlabs.org, linux-block@vger.kernel.org,
	linux-cifs@vger.kernel.org, linux-crypto@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net,
	linux-fsdevel@vger.kernel.org, linux-iio@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
	linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org,
	linux-rdma@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-sgx@vger.kernel.org, linux-staging@lists.linux.dev,
	linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org,
	linux-wireless@vger.kernel.org,
	linux1394-devel@lists.sourceforge.net, linux@rasmusvillemoes.dk,
	linuxppc-dev@lists.ozlabs.org, nathan@kernel.org,
	netdev@vger.kernel.org, nouveau@lists.freedesktop.org,
	rppt@kernel.org, samba-technical@lists.samba.org,
	tglx@linutronix.de, tipc-discussion@lists.sourceforge.net,
	torvalds@linux-foundation.org,
	v9fs-developer@lists.sourceforge.net, xiam0nd.tong@gmail.com
Subject: Re: [PATCH 2/6] treewide: remove using list iterator after loop body as a ptr
Date: Fri,  4 Mar 2022 14:59:57 +0800	[thread overview]
Message-ID: <20220304065957.16799-1-xiam0nd.tong@gmail.com> (raw)
In-Reply-To: <20220303121824.qdyrognluik74iph@maple.lan>

On Thu, 3 Mar 2022 12:18:24 +0000, Daniel Thompson wrote:
> On Thu, Mar 03, 2022 at 03:26:57PM +0800, Xiaomeng Tong wrote:
> > On Thu, 3 Mar 2022 04:58:23 +0000, David Laight wrote:
> > > on 3 Mar 2022 10:27:29 +0800, Xiaomeng Tong wrote:
> > > > The problem is the mis-use of iterator outside the loop on exit, and
> > > > the iterator will be the HEAD's container_of pointer which pointers
> > > > to a type-confused struct. Sidenote: The *mis-use* here refers to
> > > > mistakely access to other members of the struct, instead of the
> > > > list_head member which acutally is the valid HEAD.
> > >
> > > The problem is that the HEAD's container_of pointer should never
> > > be calculated at all.
> > > This is what is fundamentally broken about the current definition.
> > 
> > Yes, the rule is "the HEAD's container_of pointer should never be
> > calculated at all outside the loop", but how do you make sure everyone
> > follows this rule?
> 
> Your formulation of the rule is correct: never run container_of() on HEAD
> pointer.

Actually, it is not my rule. My rule is that never access other members
of the struct except for the list_head member after the loop, because
this is a invalid member after loop exit, but valid for the list_head
member which just is HEAD and the lately caculation (&pos->head) seems
harmless.

I have considered the case that the HEAD's container "pos" is layouted
across the max and the min address boundary, which means the address of
HEAD is likely 0x60, and the address of pos is likely 0xffffffe0.
It seems ok to caculate pos with:
((type *)(__mptr - offsetof(type, member)));
and it seems ok to caculate head outside the loop with:
if (&pos->head == &HEAD)
    return NULL;

The only case I can think of with the rule "never run container_of()
on HEAD" must be followed is when the first argument (which is &HEAD)
passing to container_of() is NULL + some offset, it may lead to the
resulting "pos->member" access being a NULL dereference. But maybe
the caller can take the responsibility to check if it is NULL, not
container_of() itself.

Please remind me if i missed somthing, thanks.

> 
> However the rule that is introduced by list_for_each_entry_inside() is
> *not* this rule. The rule it introduces is: never access the iterator
> variable outside the loop.

Sorry for the confusion, indeed, that is two *different* rule.

> 
> Making the iterator NULL on loop exit does follow the rule you proposed
> but using a different technique: do not allow HEAD to be stored in the
> iterator variable after loop exit. This also makes it impossible to run
> container_of() on the HEAD pointer.
> 

It does not. My rule is: never access the iterator variable outside the loop.
The "Making the iterator NULL on loop exit" way still leak the pos with NULL
outside the loop, may lead to a NULL deference.

> 
> > Everyone makes mistakes, but we can eliminate them all from the beginning
> > with the help of compiler which can catch such use-after-loop things.
> 
> Indeed but if we introduce new interfaces then we don't have to worry
> about existing usages and silent regressions. Code will have been
> written knowing the loop can exit with the iterator set to NULL.

Yes, it is more simple and compatible with existing interfaces. Howerver,
you should make every developers to remember that "pos will be set NULL on
loop exit", which is unreasonable and impossible for *every* single person.
Otherwise the mis-use-after-loop will lead to a NULL dereference.
But we can kill this problem by declaring iterator inside the loop and the
complier will catch it if somebody mis-use-after-loop.

> 
> Sure it is still possible for programmers to make mistakes and
> dereference the NULL pointer but C programmers are well training w.r.t.
> NULL pointer checking so such mistakes are much less likely than with
> the current list_for_each_entry() macro. This risk must be offset
> against the way a NULLify approach can lead to more elegant code when we
> are doing a list search.
> 

Yes, the NULLify approach is better than the current list_for_each_entry()
macro, but i stick with that the list_for_each_entry_inside() way is best
and perfect _technically_.

Thus, my idea is *better a finger off than always aching*, let's settle this
damn problem once and for all, with list_for_each_entry_inside().

--
Xiaomeng Tong

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

WARNING: multiple messages have this Message-ID (diff)
From: Xiaomeng Tong <xiam0nd.tong@gmail.com>
To: daniel.thompson@linaro.org
Cc: alsa-devel@alsa-project.org, kvm@vger.kernel.org,
	gustavo@embeddedor.com, linux-iio@vger.kernel.org,
	kgdb-bugreport@lists.sourceforge.net, linux@rasmusvillemoes.dk,
	dri-devel@lists.freedesktop.org, c.giuffrida@vu.nl,
	amd-gfx@lists.freedesktop.org, torvalds@linux-foundation.org,
	samba-technical@lists.samba.org,
	linux1394-devel@lists.sourceforge.net, drbd-dev@lists.linbit.com,
	linux-arch@vger.kernel.org, linux-cifs@vger.kernel.org,
	linux-aspeed@lists.ozlabs.org, linux-scsi@vger.kernel.org,
	linux-rdma@vger.kernel.org, linux-staging@lists.linux.dev,
	h.j.bos@vu.nl, jgg@ziepe.ca, intel-wired-lan@lists.osuosl.org,
	nouveau@lists.freedesktop.org,
	bcm-kernel-feedback-list@broadcom.com, dan.carpenter@oracle.com,
	linux-media@vger.kernel.org, keescook@chromium.org,
	arnd@arndb.de, linux-pm@vger.kernel.org,
	intel-gfx@lists.freedesktop.org, bjohannesmeyer@gmail.com,
	linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	christophe.jaillet@wanadoo.fr, jakobkoschel@gmail.com,
	v9fs-developer@lists.sourceforge.net,
	linux-tegra@vger.kernel.org, tglx@linutronix.de,
	andriy.shevchenko@linux.intel.com,
	linux-arm-kernel@lists.infradead.org, linux-sgx@vger.kernel.org,
	nathan@kernel.org, netdev@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net, xiam0nd.tong@gmail.com,
	david.laight@aculab.com, tipc-discussion@lists.sourceforge.net,
	linux-crypto@vger.kernel.org, dmaengine@vger.kernel.org,
	linux-mediatek@lists.infradead.org, akpm@linux-foundation.org,
	linuxppc-dev@lists.ozlabs.org, christian.koenig@amd.com,
	rppt@kernel.org
Subject: Re: [PATCH 2/6] treewide: remove using list iterator after loop body as a ptr
Date: Fri,  4 Mar 2022 14:59:57 +0800	[thread overview]
Message-ID: <20220304065957.16799-1-xiam0nd.tong@gmail.com> (raw)
In-Reply-To: <20220303121824.qdyrognluik74iph@maple.lan>

On Thu, 3 Mar 2022 12:18:24 +0000, Daniel Thompson wrote:
> On Thu, Mar 03, 2022 at 03:26:57PM +0800, Xiaomeng Tong wrote:
> > On Thu, 3 Mar 2022 04:58:23 +0000, David Laight wrote:
> > > on 3 Mar 2022 10:27:29 +0800, Xiaomeng Tong wrote:
> > > > The problem is the mis-use of iterator outside the loop on exit, and
> > > > the iterator will be the HEAD's container_of pointer which pointers
> > > > to a type-confused struct. Sidenote: The *mis-use* here refers to
> > > > mistakely access to other members of the struct, instead of the
> > > > list_head member which acutally is the valid HEAD.
> > >
> > > The problem is that the HEAD's container_of pointer should never
> > > be calculated at all.
> > > This is what is fundamentally broken about the current definition.
> > 
> > Yes, the rule is "the HEAD's container_of pointer should never be
> > calculated at all outside the loop", but how do you make sure everyone
> > follows this rule?
> 
> Your formulation of the rule is correct: never run container_of() on HEAD
> pointer.

Actually, it is not my rule. My rule is that never access other members
of the struct except for the list_head member after the loop, because
this is a invalid member after loop exit, but valid for the list_head
member which just is HEAD and the lately caculation (&pos->head) seems
harmless.

I have considered the case that the HEAD's container "pos" is layouted
across the max and the min address boundary, which means the address of
HEAD is likely 0x60, and the address of pos is likely 0xffffffe0.
It seems ok to caculate pos with:
((type *)(__mptr - offsetof(type, member)));
and it seems ok to caculate head outside the loop with:
if (&pos->head == &HEAD)
    return NULL;

The only case I can think of with the rule "never run container_of()
on HEAD" must be followed is when the first argument (which is &HEAD)
passing to container_of() is NULL + some offset, it may lead to the
resulting "pos->member" access being a NULL dereference. But maybe
the caller can take the responsibility to check if it is NULL, not
container_of() itself.

Please remind me if i missed somthing, thanks.

> 
> However the rule that is introduced by list_for_each_entry_inside() is
> *not* this rule. The rule it introduces is: never access the iterator
> variable outside the loop.

Sorry for the confusion, indeed, that is two *different* rule.

> 
> Making the iterator NULL on loop exit does follow the rule you proposed
> but using a different technique: do not allow HEAD to be stored in the
> iterator variable after loop exit. This also makes it impossible to run
> container_of() on the HEAD pointer.
> 

It does not. My rule is: never access the iterator variable outside the loop.
The "Making the iterator NULL on loop exit" way still leak the pos with NULL
outside the loop, may lead to a NULL deference.

> 
> > Everyone makes mistakes, but we can eliminate them all from the beginning
> > with the help of compiler which can catch such use-after-loop things.
> 
> Indeed but if we introduce new interfaces then we don't have to worry
> about existing usages and silent regressions. Code will have been
> written knowing the loop can exit with the iterator set to NULL.

Yes, it is more simple and compatible with existing interfaces. Howerver,
you should make every developers to remember that "pos will be set NULL on
loop exit", which is unreasonable and impossible for *every* single person.
Otherwise the mis-use-after-loop will lead to a NULL dereference.
But we can kill this problem by declaring iterator inside the loop and the
complier will catch it if somebody mis-use-after-loop.

> 
> Sure it is still possible for programmers to make mistakes and
> dereference the NULL pointer but C programmers are well training w.r.t.
> NULL pointer checking so such mistakes are much less likely than with
> the current list_for_each_entry() macro. This risk must be offset
> against the way a NULLify approach can lead to more elegant code when we
> are doing a list search.
> 

Yes, the NULLify approach is better than the current list_for_each_entry()
macro, but i stick with that the list_for_each_entry_inside() way is best
and perfect _technically_.

Thus, my idea is *better a finger off than always aching*, let's settle this
damn problem once and for all, with list_for_each_entry_inside().

--
Xiaomeng Tong

WARNING: multiple messages have this Message-ID (diff)
From: Xiaomeng Tong <xiam0nd.tong@gmail.com>
To: daniel.thompson@linaro.org
Cc: alsa-devel@alsa-project.org, kvm@vger.kernel.org,
	gustavo@embeddedor.com, linux-iio@vger.kernel.org,
	kgdb-bugreport@lists.sourceforge.net, linux@rasmusvillemoes.dk,
	dri-devel@lists.freedesktop.org, c.giuffrida@vu.nl,
	amd-gfx@lists.freedesktop.org, torvalds@linux-foundation.org,
	samba-technical@lists.samba.org,
	linux1394-devel@lists.sourceforge.net, drbd-dev@lists.linbit.com,
	linux-arch@vger.kernel.org, linux-cifs@vger.kernel.org,
	linux-aspeed@lists.ozlabs.org, linux-scsi@vger.kernel.org,
	linux-rdma@vger.kernel.org, linux-staging@lists.linux.dev,
	h.j.bos@vu.nl, jgg@ziepe.ca, intel-wired-lan@lists.osuosl.org,
	nouveau@lists.freedesktop.org,
	bcm-kernel-feedback-list@broadcom.com, dan.carpenter@oracle.com,
	linux-media@vger.kernel.org, keescook@chromium.org,
	arnd@arndb.de, linux-pm@vger.kernel.org,
	intel-gfx@lists.freedesktop.org, bjohannesmeyer@gmail.com,
	linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	christophe.jaillet@wanadoo.fr, jakobkoschel@gmail.com,
	v9fs-developer@lists.sourceforge.net,
	linux-tegra@vger.kernel.org, tglx@linutronix.de,
	andriy.shevchenko@linux.intel.com,
	linux-arm-kernel@lists.infradead.org, linux-sgx@vger.kernel.org,
	nathan@kernel.org, netdev@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net, xiam0nd.tong@gmail.com,
	david.laight@aculab.com, tipc-discussion@lists.sourceforge.net,
	linux-crypto@vger.kernel.org, dmaengine@vger.kernel.org,
	linux-mediatek@lists.infradead.org, akpm@linux-foundation.org,
	linuxppc-dev@lists.ozlabs.org, christian.koenig@amd.com,
	rppt@kernel.org
Subject: Re: [Intel-gfx] [PATCH 2/6] treewide: remove using list iterator after loop body as a ptr
Date: Fri,  4 Mar 2022 14:59:57 +0800	[thread overview]
Message-ID: <20220304065957.16799-1-xiam0nd.tong@gmail.com> (raw)
In-Reply-To: <20220303121824.qdyrognluik74iph@maple.lan>

On Thu, 3 Mar 2022 12:18:24 +0000, Daniel Thompson wrote:
> On Thu, Mar 03, 2022 at 03:26:57PM +0800, Xiaomeng Tong wrote:
> > On Thu, 3 Mar 2022 04:58:23 +0000, David Laight wrote:
> > > on 3 Mar 2022 10:27:29 +0800, Xiaomeng Tong wrote:
> > > > The problem is the mis-use of iterator outside the loop on exit, and
> > > > the iterator will be the HEAD's container_of pointer which pointers
> > > > to a type-confused struct. Sidenote: The *mis-use* here refers to
> > > > mistakely access to other members of the struct, instead of the
> > > > list_head member which acutally is the valid HEAD.
> > >
> > > The problem is that the HEAD's container_of pointer should never
> > > be calculated at all.
> > > This is what is fundamentally broken about the current definition.
> > 
> > Yes, the rule is "the HEAD's container_of pointer should never be
> > calculated at all outside the loop", but how do you make sure everyone
> > follows this rule?
> 
> Your formulation of the rule is correct: never run container_of() on HEAD
> pointer.

Actually, it is not my rule. My rule is that never access other members
of the struct except for the list_head member after the loop, because
this is a invalid member after loop exit, but valid for the list_head
member which just is HEAD and the lately caculation (&pos->head) seems
harmless.

I have considered the case that the HEAD's container "pos" is layouted
across the max and the min address boundary, which means the address of
HEAD is likely 0x60, and the address of pos is likely 0xffffffe0.
It seems ok to caculate pos with:
((type *)(__mptr - offsetof(type, member)));
and it seems ok to caculate head outside the loop with:
if (&pos->head == &HEAD)
    return NULL;

The only case I can think of with the rule "never run container_of()
on HEAD" must be followed is when the first argument (which is &HEAD)
passing to container_of() is NULL + some offset, it may lead to the
resulting "pos->member" access being a NULL dereference. But maybe
the caller can take the responsibility to check if it is NULL, not
container_of() itself.

Please remind me if i missed somthing, thanks.

> 
> However the rule that is introduced by list_for_each_entry_inside() is
> *not* this rule. The rule it introduces is: never access the iterator
> variable outside the loop.

Sorry for the confusion, indeed, that is two *different* rule.

> 
> Making the iterator NULL on loop exit does follow the rule you proposed
> but using a different technique: do not allow HEAD to be stored in the
> iterator variable after loop exit. This also makes it impossible to run
> container_of() on the HEAD pointer.
> 

It does not. My rule is: never access the iterator variable outside the loop.
The "Making the iterator NULL on loop exit" way still leak the pos with NULL
outside the loop, may lead to a NULL deference.

> 
> > Everyone makes mistakes, but we can eliminate them all from the beginning
> > with the help of compiler which can catch such use-after-loop things.
> 
> Indeed but if we introduce new interfaces then we don't have to worry
> about existing usages and silent regressions. Code will have been
> written knowing the loop can exit with the iterator set to NULL.

Yes, it is more simple and compatible with existing interfaces. Howerver,
you should make every developers to remember that "pos will be set NULL on
loop exit", which is unreasonable and impossible for *every* single person.
Otherwise the mis-use-after-loop will lead to a NULL dereference.
But we can kill this problem by declaring iterator inside the loop and the
complier will catch it if somebody mis-use-after-loop.

> 
> Sure it is still possible for programmers to make mistakes and
> dereference the NULL pointer but C programmers are well training w.r.t.
> NULL pointer checking so such mistakes are much less likely than with
> the current list_for_each_entry() macro. This risk must be offset
> against the way a NULLify approach can lead to more elegant code when we
> are doing a list search.
> 

Yes, the NULLify approach is better than the current list_for_each_entry()
macro, but i stick with that the list_for_each_entry_inside() way is best
and perfect _technically_.

Thus, my idea is *better a finger off than always aching*, let's settle this
damn problem once and for all, with list_for_each_entry_inside().

--
Xiaomeng Tong

WARNING: multiple messages have this Message-ID (diff)
From: Xiaomeng Tong <xiam0nd.tong@gmail.com>
To: daniel.thompson@linaro.org
Cc: alsa-devel@alsa-project.org, kvm@vger.kernel.org,
	gustavo@embeddedor.com, linux-iio@vger.kernel.org,
	kgdb-bugreport@lists.sourceforge.net, linux@rasmusvillemoes.dk,
	dri-devel@lists.freedesktop.org, c.giuffrida@vu.nl,
	amd-gfx@lists.freedesktop.org, torvalds@linux-foundation.org,
	samba-technical@lists.samba.org,
	linux1394-devel@lists.sourceforge.net, drbd-dev@lists.linbit.com,
	linux-arch@vger.kernel.org, linux-cifs@vger.kernel.org,
	linux-aspeed@lists.ozlabs.org, linux-scsi@vger.kernel.org,
	linux-rdma@vger.kernel.org, linux-staging@lists.linux.dev,
	h.j.bos@vu.nl, jgg@ziepe.ca, intel-wired-lan@lists.osuosl.org,
	nouveau@lists.freedesktop.org,
	bcm-kernel-feedback-list@broadcom.com, dan.carpenter@oracle.com,
	linux-media@vger.kernel.org, keescook@chromium.org,
	arnd@arndb.de, linux-pm@vger.kernel.org,
	intel-gfx@lists.freedesktop.org, bjohannesmeyer@gmail.com,
	linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	christophe.jaillet@wanadoo.fr, jakobkoschel@gmail.com,
	v9fs-developer@lists.sourceforge.net,
	linux-tegra@vger.kernel.org, tglx@linutronix.de,
	andriy.shevchenko@linux.intel.com,
	linux-arm-kernel@lists.infradead.org, linux-sgx@vger.kernel.org,
	nathan@kernel.org, netdev@vger.kernel.org,
	linux-usb@vger.kernel.org, linux-wireless@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net, xiam0nd.tong@gmail.com,
	david.laight@aculab.com, tipc-discussion@lists.sourceforge.net,
	linux-crypto@vger.kernel.org, dmaengine@vger.kernel.org,
	linux-mediatek@lists.infradead.org, akpm@linux-foundation.org,
	linuxppc-dev@lists.ozlabs.org, christian.koenig@amd.com,
	rppt@kernel.org
Subject: Re: [Nouveau] [PATCH 2/6] treewide: remove using list iterator after loop body as a ptr
Date: Fri,  4 Mar 2022 14:59:57 +0800	[thread overview]
Message-ID: <20220304065957.16799-1-xiam0nd.tong@gmail.com> (raw)
In-Reply-To: <20220303121824.qdyrognluik74iph@maple.lan>

On Thu, 3 Mar 2022 12:18:24 +0000, Daniel Thompson wrote:
> On Thu, Mar 03, 2022 at 03:26:57PM +0800, Xiaomeng Tong wrote:
> > On Thu, 3 Mar 2022 04:58:23 +0000, David Laight wrote:
> > > on 3 Mar 2022 10:27:29 +0800, Xiaomeng Tong wrote:
> > > > The problem is the mis-use of iterator outside the loop on exit, and
> > > > the iterator will be the HEAD's container_of pointer which pointers
> > > > to a type-confused struct. Sidenote: The *mis-use* here refers to
> > > > mistakely access to other members of the struct, instead of the
> > > > list_head member which acutally is the valid HEAD.
> > >
> > > The problem is that the HEAD's container_of pointer should never
> > > be calculated at all.
> > > This is what is fundamentally broken about the current definition.
> > 
> > Yes, the rule is "the HEAD's container_of pointer should never be
> > calculated at all outside the loop", but how do you make sure everyone
> > follows this rule?
> 
> Your formulation of the rule is correct: never run container_of() on HEAD
> pointer.

Actually, it is not my rule. My rule is that never access other members
of the struct except for the list_head member after the loop, because
this is a invalid member after loop exit, but valid for the list_head
member which just is HEAD and the lately caculation (&pos->head) seems
harmless.

I have considered the case that the HEAD's container "pos" is layouted
across the max and the min address boundary, which means the address of
HEAD is likely 0x60, and the address of pos is likely 0xffffffe0.
It seems ok to caculate pos with:
((type *)(__mptr - offsetof(type, member)));
and it seems ok to caculate head outside the loop with:
if (&pos->head == &HEAD)
    return NULL;

The only case I can think of with the rule "never run container_of()
on HEAD" must be followed is when the first argument (which is &HEAD)
passing to container_of() is NULL + some offset, it may lead to the
resulting "pos->member" access being a NULL dereference. But maybe
the caller can take the responsibility to check if it is NULL, not
container_of() itself.

Please remind me if i missed somthing, thanks.

> 
> However the rule that is introduced by list_for_each_entry_inside() is
> *not* this rule. The rule it introduces is: never access the iterator
> variable outside the loop.

Sorry for the confusion, indeed, that is two *different* rule.

> 
> Making the iterator NULL on loop exit does follow the rule you proposed
> but using a different technique: do not allow HEAD to be stored in the
> iterator variable after loop exit. This also makes it impossible to run
> container_of() on the HEAD pointer.
> 

It does not. My rule is: never access the iterator variable outside the loop.
The "Making the iterator NULL on loop exit" way still leak the pos with NULL
outside the loop, may lead to a NULL deference.

> 
> > Everyone makes mistakes, but we can eliminate them all from the beginning
> > with the help of compiler which can catch such use-after-loop things.
> 
> Indeed but if we introduce new interfaces then we don't have to worry
> about existing usages and silent regressions. Code will have been
> written knowing the loop can exit with the iterator set to NULL.

Yes, it is more simple and compatible with existing interfaces. Howerver,
you should make every developers to remember that "pos will be set NULL on
loop exit", which is unreasonable and impossible for *every* single person.
Otherwise the mis-use-after-loop will lead to a NULL dereference.
But we can kill this problem by declaring iterator inside the loop and the
complier will catch it if somebody mis-use-after-loop.

> 
> Sure it is still possible for programmers to make mistakes and
> dereference the NULL pointer but C programmers are well training w.r.t.
> NULL pointer checking so such mistakes are much less likely than with
> the current list_for_each_entry() macro. This risk must be offset
> against the way a NULLify approach can lead to more elegant code when we
> are doing a list search.
> 

Yes, the NULLify approach is better than the current list_for_each_entry()
macro, but i stick with that the list_for_each_entry_inside() way is best
and perfect _technically_.

Thus, my idea is *better a finger off than always aching*, let's settle this
damn problem once and for all, with list_for_each_entry_inside().

--
Xiaomeng Tong

WARNING: multiple messages have this Message-ID (diff)
From: Xiaomeng Tong <xiam0nd.tong@gmail.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH 2/6] treewide: remove using list iterator after loop body as a ptr
Date: Fri,  4 Mar 2022 14:59:57 +0800	[thread overview]
Message-ID: <20220304065957.16799-1-xiam0nd.tong@gmail.com> (raw)
In-Reply-To: <20220303121824.qdyrognluik74iph@maple.lan>

On Thu, 3 Mar 2022 12:18:24 +0000, Daniel Thompson wrote:
> On Thu, Mar 03, 2022 at 03:26:57PM +0800, Xiaomeng Tong wrote:
> > On Thu, 3 Mar 2022 04:58:23 +0000, David Laight wrote:
> > > on 3 Mar 2022 10:27:29 +0800, Xiaomeng Tong wrote:
> > > > The problem is the mis-use of iterator outside the loop on exit, and
> > > > the iterator will be the HEAD's container_of pointer which pointers
> > > > to a type-confused struct. Sidenote: The *mis-use* here refers to
> > > > mistakely access to other members of the struct, instead of the
> > > > list_head member which acutally is the valid HEAD.
> > >
> > > The problem is that the HEAD's container_of pointer should never
> > > be calculated at all.
> > > This is what is fundamentally broken about the current definition.
> > 
> > Yes, the rule is "the HEAD's container_of pointer should never be
> > calculated at all outside the loop", but how do you make sure everyone
> > follows this rule?
> 
> Your formulation of the rule is correct: never run container_of() on HEAD
> pointer.

Actually, it is not my rule. My rule is that never access other members
of the struct except for the list_head member after the loop, because
this is a invalid member after loop exit, but valid for the list_head
member which just is HEAD and the lately caculation (&pos->head) seems
harmless.

I have considered the case that the HEAD's container "pos" is layouted
across the max and the min address boundary, which means the address of
HEAD is likely 0x60, and the address of pos is likely 0xffffffe0.
It seems ok to caculate pos with:
((type *)(__mptr - offsetof(type, member)));
and it seems ok to caculate head outside the loop with:
if (&pos->head == &HEAD)
    return NULL;

The only case I can think of with the rule "never run container_of()
on HEAD" must be followed is when the first argument (which is &HEAD)
passing to container_of() is NULL + some offset, it may lead to the
resulting "pos->member" access being a NULL dereference. But maybe
the caller can take the responsibility to check if it is NULL, not
container_of() itself.

Please remind me if i missed somthing, thanks.

> 
> However the rule that is introduced by list_for_each_entry_inside() is
> *not* this rule. The rule it introduces is: never access the iterator
> variable outside the loop.

Sorry for the confusion, indeed, that is two *different* rule.

> 
> Making the iterator NULL on loop exit does follow the rule you proposed
> but using a different technique: do not allow HEAD to be stored in the
> iterator variable after loop exit. This also makes it impossible to run
> container_of() on the HEAD pointer.
> 

It does not. My rule is: never access the iterator variable outside the loop.
The "Making the iterator NULL on loop exit" way still leak the pos with NULL
outside the loop, may lead to a NULL deference.

> 
> > Everyone makes mistakes, but we can eliminate them all from the beginning
> > with the help of compiler which can catch such use-after-loop things.
> 
> Indeed but if we introduce new interfaces then we don't have to worry
> about existing usages and silent regressions. Code will have been
> written knowing the loop can exit with the iterator set to NULL.

Yes, it is more simple and compatible with existing interfaces. Howerver,
you should make every developers to remember that "pos will be set NULL on
loop exit", which is unreasonable and impossible for *every* single person.
Otherwise the mis-use-after-loop will lead to a NULL dereference.
But we can kill this problem by declaring iterator inside the loop and the
complier will catch it if somebody mis-use-after-loop.

> 
> Sure it is still possible for programmers to make mistakes and
> dereference the NULL pointer but C programmers are well training w.r.t.
> NULL pointer checking so such mistakes are much less likely than with
> the current list_for_each_entry() macro. This risk must be offset
> against the way a NULLify approach can lead to more elegant code when we
> are doing a list search.
> 

Yes, the NULLify approach is better than the current list_for_each_entry()
macro, but i stick with that the list_for_each_entry_inside() way is best
and perfect _technically_.

Thus, my idea is *better a finger off than always aching*, let's settle this
damn problem once and for all, with list_for_each_entry_inside().

--
Xiaomeng Tong

  reply	other threads:[~2022-03-04  7:00 UTC|newest]

Thread overview: 596+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-28 11:08 [PATCH 0/6] Remove usage of list iterator past the loop body Jakob Koschel
2022-02-28 11:08 ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 11:08 ` [Nouveau] " Jakob Koschel
2022-02-28 11:08 ` [Intel-gfx] " Jakob Koschel
2022-02-28 11:08 ` Jakob Koschel
2022-02-28 11:08 ` Jakob Koschel
2022-02-28 11:08 ` [f2fs-dev] " Jakob Koschel
2022-02-28 11:08 ` [PATCH 1/6] drivers: usb: remove " Jakob Koschel
2022-02-28 11:08   ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 11:08   ` [Nouveau] " Jakob Koschel
2022-02-28 11:08   ` [Intel-gfx] " Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` [f2fs-dev] " Jakob Koschel
2022-02-28 11:24   ` Dan Carpenter
2022-02-28 11:24     ` [Intel-wired-lan] " Dan Carpenter
2022-02-28 11:24     ` [Nouveau] " Dan Carpenter
2022-02-28 11:24     ` Dan Carpenter
2022-02-28 11:24     ` [f2fs-dev] " Dan Carpenter
2022-02-28 11:24     ` [Intel-gfx] " Dan Carpenter
2022-02-28 11:24     ` Dan Carpenter
2022-02-28 12:03     ` Jakob Koschel
2022-02-28 12:03       ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 12:03       ` [Nouveau] " Jakob Koschel
2022-02-28 12:03       ` [Intel-gfx] " Jakob Koschel
2022-02-28 12:03       ` Jakob Koschel
2022-02-28 12:03       ` Jakob Koschel
2022-02-28 12:03       ` [f2fs-dev] " Jakob Koschel
2022-02-28 13:18       ` Dan Carpenter
2022-02-28 13:18         ` [Nouveau] " Dan Carpenter
2022-02-28 13:18         ` Dan Carpenter
2022-02-28 13:18         ` [f2fs-dev] " Dan Carpenter
2022-02-28 13:18         ` [Intel-gfx] " Dan Carpenter
2022-02-28 13:18         ` Dan Carpenter
2022-02-28 18:20     ` [f2fs-dev] " Joe Perches
2022-02-28 18:20       ` [Intel-wired-lan] " Joe Perches
2022-02-28 18:20       ` [Nouveau] " Joe Perches
2022-02-28 18:20       ` Joe Perches
2022-02-28 18:20       ` [Intel-gfx] " Joe Perches
2022-02-28 18:20       ` Joe Perches
2022-02-28 18:20       ` Joe Perches
2022-03-01  5:52       ` Dan Carpenter
2022-03-01  5:52         ` [Intel-wired-lan] " Dan Carpenter
2022-03-01  5:52         ` [Nouveau] " Dan Carpenter
2022-03-01  5:52         ` [f2fs-dev] " Dan Carpenter
2022-03-01  5:52         ` [Intel-gfx] " Dan Carpenter
2022-03-01  5:52         ` Dan Carpenter
2022-03-01  5:52         ` Dan Carpenter
2022-02-28 11:08 ` [PATCH 2/6] treewide: remove using list iterator after loop body as a ptr Jakob Koschel
2022-02-28 11:08   ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 11:08   ` [Nouveau] " Jakob Koschel
2022-02-28 11:08   ` [Intel-gfx] " Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` [f2fs-dev] " Jakob Koschel
2022-02-28 11:20   ` Greg KH
2022-02-28 11:20     ` [Intel-wired-lan] " Greg KH
2022-02-28 11:20     ` [Nouveau] " Greg KH
2022-02-28 11:20     ` Greg KH
2022-02-28 11:20     ` [Intel-gfx] " Greg KH
2022-02-28 11:20     ` Greg KH
2022-02-28 11:20     ` [f2fs-dev] " Greg KH
2022-02-28 12:06     ` Jakob Koschel
2022-02-28 12:06       ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 12:06       ` [Nouveau] " Jakob Koschel
2022-02-28 12:06       ` [Intel-gfx] " Jakob Koschel
2022-02-28 12:06       ` Jakob Koschel
2022-02-28 12:06       ` Jakob Koschel
2022-02-28 12:06       ` [f2fs-dev] " Jakob Koschel
2022-03-01 17:37       ` Greg KH
2022-03-01 17:37         ` [Intel-wired-lan] " Greg KH
2022-03-01 17:37         ` [Nouveau] " Greg KH
2022-03-01 17:37         ` [f2fs-dev] " Greg KH
2022-03-01 17:37         ` Greg KH
2022-03-01 17:37         ` [Intel-gfx] " Greg KH
2022-03-01 17:37         ` Greg KH
2022-02-28 12:19   ` Christian König
2022-02-28 12:19     ` [Intel-wired-lan] " Christian =?unknown-8bit?q?K=C3=B6nig?=
2022-02-28 12:19     ` [Nouveau] " Christian König
2022-02-28 12:19     ` [f2fs-dev] " Christian König via Linux-f2fs-devel
2022-02-28 12:19     ` Christian König
2022-02-28 12:19     ` [Intel-gfx] " Christian König
2022-02-28 12:19     ` Christian König
2022-02-28 19:56     ` Linus Torvalds
2022-02-28 19:56       ` [Intel-wired-lan] " Linus Torvalds
2022-02-28 19:56       ` [Nouveau] " Linus Torvalds
2022-02-28 19:56       ` Linus Torvalds
2022-02-28 19:56       ` [Intel-gfx] " Linus Torvalds
2022-02-28 19:56       ` Linus Torvalds
2022-02-28 20:03       ` Linus Torvalds
2022-02-28 20:03         ` [Intel-wired-lan] " Linus Torvalds
2022-02-28 20:03         ` [Nouveau] " Linus Torvalds
2022-02-28 20:03         ` Linus Torvalds
2022-02-28 20:03         ` [f2fs-dev] " Linus Torvalds
2022-02-28 20:03         ` [Intel-gfx] " Linus Torvalds
2022-02-28 20:03         ` Linus Torvalds
2022-02-28 20:10         ` Linus Torvalds
2022-02-28 20:10           ` [Intel-wired-lan] " Linus Torvalds
2022-02-28 20:10           ` [Nouveau] " Linus Torvalds
2022-02-28 20:10           ` [Intel-gfx] " Linus Torvalds
2022-02-28 20:10           ` Linus Torvalds
2022-02-28 20:10           ` Linus Torvalds
2022-02-28 20:14           ` Linus Torvalds
2022-02-28 20:14             ` [Intel-wired-lan] " Linus Torvalds
2022-02-28 20:14             ` [Nouveau] " Linus Torvalds
2022-02-28 20:14             ` Linus Torvalds
2022-02-28 20:14             ` [f2fs-dev] " Linus Torvalds
2022-02-28 20:14             ` Linus Torvalds
2022-02-28 20:14             ` [Intel-gfx] " Linus Torvalds
2022-02-28 20:53             ` Segher Boessenkool
2022-02-28 20:53               ` [Intel-wired-lan] " Segher Boessenkool
2022-02-28 20:53               ` [Intel-gfx] " Segher Boessenkool
2022-02-28 20:53               ` [Nouveau] " Segher Boessenkool
2022-02-28 20:53               ` [f2fs-dev] " Segher Boessenkool
2022-02-28 20:53               ` Segher Boessenkool
2022-02-28 20:53               ` Segher Boessenkool
2022-02-28 20:16           ` Matthew Wilcox
2022-02-28 20:16             ` [Intel-wired-lan] " Matthew Wilcox
2022-02-28 20:16             ` [Nouveau] " Matthew Wilcox
2022-02-28 20:16             ` [Intel-gfx] " Matthew Wilcox
2022-02-28 20:16             ` Matthew Wilcox
2022-02-28 20:16             ` Matthew Wilcox
2022-02-28 20:16             ` [f2fs-dev] " Matthew Wilcox
2022-02-28 20:27             ` Johannes Berg
2022-02-28 20:27               ` [Intel-wired-lan] " Johannes Berg
2022-02-28 20:27               ` [Nouveau] " Johannes Berg
2022-02-28 20:27               ` [f2fs-dev] " Johannes Berg
2022-02-28 20:27               ` [Intel-gfx] " Johannes Berg
2022-02-28 20:27               ` Johannes Berg
2022-02-28 20:27               ` Johannes Berg
2022-02-28 20:41               ` Linus Torvalds
2022-02-28 20:41                 ` [Intel-wired-lan] " Linus Torvalds
2022-02-28 20:41                 ` [Nouveau] " Linus Torvalds
2022-02-28 20:41                 ` [Intel-gfx] " Linus Torvalds
2022-02-28 20:41                 ` Linus Torvalds
2022-02-28 20:41                 ` Linus Torvalds
2022-02-28 20:41                 ` [f2fs-dev] " Linus Torvalds
2022-02-28 20:37             ` Linus Torvalds
2022-02-28 20:37               ` [Intel-wired-lan] " Linus Torvalds
2022-02-28 20:37               ` [Nouveau] " Linus Torvalds
2022-02-28 20:37               ` [Intel-gfx] " Linus Torvalds
2022-02-28 20:37               ` [f2fs-dev] " Linus Torvalds
2022-02-28 20:37               ` Linus Torvalds
2022-02-28 20:37               ` Linus Torvalds
2022-02-28 23:26               ` Matthew Wilcox
2022-02-28 23:26                 ` [Intel-wired-lan] " Matthew Wilcox
2022-02-28 23:26                 ` [Nouveau] " Matthew Wilcox
2022-02-28 23:26                 ` [f2fs-dev] " Matthew Wilcox
2022-02-28 23:26                 ` [Intel-gfx] " Matthew Wilcox
2022-02-28 23:26                 ` Matthew Wilcox
2022-02-28 23:26                 ` Matthew Wilcox
2022-03-01  0:45                 ` Linus Torvalds
2022-03-01  0:45                   ` [Intel-wired-lan] " Linus Torvalds
2022-03-01  0:45                   ` [Nouveau] " Linus Torvalds
2022-03-01  0:45                   ` Linus Torvalds
2022-03-01  0:45                   ` Linus Torvalds
2022-03-01  0:45                   ` [Intel-gfx] " Linus Torvalds
2022-03-01  0:45                   ` [f2fs-dev] " Linus Torvalds
2022-03-01  0:57                   ` Linus Torvalds
2022-03-01  0:57                     ` [Intel-wired-lan] " Linus Torvalds
2022-03-01  0:57                     ` [Nouveau] " Linus Torvalds
2022-03-01  0:57                     ` [Intel-gfx] " Linus Torvalds
2022-03-01  0:57                     ` Linus Torvalds
2022-03-01  0:57                     ` [f2fs-dev] " Linus Torvalds
2022-03-01  0:57                     ` Linus Torvalds
2022-03-01 18:14                   ` Kees Cook
2022-03-01 18:14                     ` [Intel-wired-lan] " Kees Cook
2022-03-01 18:14                     ` [Nouveau] " Kees Cook
2022-03-01 18:14                     ` [f2fs-dev] " Kees Cook
2022-03-01 18:14                     ` [Intel-gfx] " Kees Cook
2022-03-01 18:14                     ` Kees Cook
2022-03-01 18:14                     ` Kees Cook
2022-03-01 18:47                     ` Linus Torvalds
2022-03-01 18:47                       ` [Intel-wired-lan] " Linus Torvalds
2022-03-01 18:47                       ` [Nouveau] " Linus Torvalds
2022-03-01 18:47                       ` [f2fs-dev] " Linus Torvalds
2022-03-01 18:47                       ` [Intel-gfx] " Linus Torvalds
2022-03-01 18:47                       ` Linus Torvalds
2022-03-01 18:47                       ` Linus Torvalds
2022-03-01 19:01                     ` Matthew Wilcox
2022-03-01 19:01                       ` [Intel-wired-lan] " Matthew Wilcox
2022-03-01 19:01                       ` [Nouveau] " Matthew Wilcox
2022-03-01 19:01                       ` [Intel-gfx] " Matthew Wilcox
2022-03-01 19:01                       ` [f2fs-dev] " Matthew Wilcox
2022-03-01 19:01                       ` Matthew Wilcox
2022-03-01 19:01                       ` Matthew Wilcox
2022-03-01  3:03             ` David Laight
2022-03-01  3:03               ` [Intel-wired-lan] " David Laight
2022-03-01  3:03               ` [Nouveau] " David Laight
2022-03-01  3:03               ` [Intel-gfx] " David Laight
2022-03-01  3:03               ` David Laight
2022-03-01  3:03               ` David Laight
2022-03-01  3:03               ` [f2fs-dev] " David Laight
2022-02-28 21:47           ` Jakob Koschel
2022-02-28 21:47             ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 21:47             ` [Intel-gfx] " Jakob Koschel
2022-02-28 21:47             ` [Nouveau] " Jakob Koschel
2022-02-28 21:47             ` Jakob Koschel
2022-02-28 21:47             ` [f2fs-dev] " Jakob Koschel
2022-02-28 21:47             ` Jakob Koschel
2022-03-01  0:41             ` Linus Torvalds
2022-03-01  0:41               ` [Intel-wired-lan] " Linus Torvalds
2022-03-01  0:41               ` [Nouveau] " Linus Torvalds
2022-03-01  0:41               ` Linus Torvalds
2022-03-01  0:41               ` [Intel-gfx] " Linus Torvalds
2022-03-01  0:41               ` Linus Torvalds
2022-03-01  0:41               ` [f2fs-dev] " Linus Torvalds
2022-03-01  6:32               ` Jakub Kicinski
2022-03-01  6:32                 ` [Intel-wired-lan] " Jakub Kicinski
2022-03-01  6:32                 ` [Nouveau] " Jakub Kicinski
2022-03-01  6:32                 ` [Intel-gfx] " Jakub Kicinski
2022-03-01  6:32                 ` Jakub Kicinski
2022-03-01  6:32                 ` Jakub Kicinski
2022-03-01  6:32                 ` [f2fs-dev] " Jakub Kicinski
2022-03-01 11:28               ` Jakob Koschel
2022-03-01 11:28                 ` [Intel-wired-lan] " Jakob Koschel
2022-03-01 11:28                 ` [Nouveau] " Jakob Koschel
2022-03-01 11:28                 ` [Intel-gfx] " Jakob Koschel
2022-03-01 11:28                 ` [f2fs-dev] " Jakob Koschel
2022-03-01 11:28                 ` Jakob Koschel
2022-03-01 11:28                 ` Jakob Koschel
2022-03-01 17:36                 ` Greg KH
2022-03-01 17:36                   ` [Intel-wired-lan] " Greg KH
2022-03-01 17:36                   ` [Nouveau] " Greg KH
2022-03-01 17:36                   ` [f2fs-dev] " Greg KH
2022-03-01 17:36                   ` [Intel-gfx] " Greg KH
2022-03-01 17:36                   ` Greg KH
2022-03-01 17:36                   ` Greg KH
2022-03-01 17:40                   ` [f2fs-dev] " Jakob Koschel
2022-03-01 17:40                     ` [Intel-wired-lan] " Jakob Koschel
2022-03-01 17:40                     ` [Nouveau] " Jakob Koschel
2022-03-01 17:40                     ` [Intel-gfx] " Jakob Koschel
2022-03-01 17:40                     ` Jakob Koschel
2022-03-01 17:40                     ` Jakob Koschel
2022-03-01 17:40                     ` Jakob Koschel
2022-03-01 17:58                     ` Greg KH
2022-03-01 17:58                       ` [Intel-wired-lan] " Greg KH
2022-03-01 17:58                       ` [Nouveau] " Greg KH
2022-03-01 17:58                       ` [Intel-gfx] " Greg KH
2022-03-01 17:58                       ` Greg KH
2022-03-01 17:58                       ` Greg KH
2022-03-01 17:58                       ` [f2fs-dev] " Greg KH
2022-03-01 18:21                 ` Kees Cook
2022-03-01 18:21                   ` [Intel-wired-lan] " Kees Cook
2022-03-01 18:21                   ` [Nouveau] " Kees Cook
2022-03-01 18:21                   ` [f2fs-dev] " Kees Cook
2022-03-01 18:21                   ` [Intel-gfx] " Kees Cook
2022-03-01 18:21                   ` Kees Cook
2022-03-01 18:21                   ` Kees Cook
2022-03-02  9:31               ` Xiaomeng Tong
2022-03-02  9:31                 ` [Intel-wired-lan] " Xiaomeng Tong
2022-03-02  9:31                 ` [Nouveau] " Xiaomeng Tong
2022-03-02  9:31                 ` [Intel-gfx] " Xiaomeng Tong
2022-03-02  9:31                 ` Xiaomeng Tong
2022-03-02  9:31                 ` Xiaomeng Tong
2022-03-02  9:31                 ` [f2fs-dev] " Xiaomeng Tong
2022-03-02 14:04                 ` David Laight
2022-03-02 14:04                   ` [Intel-wired-lan] " David Laight
2022-03-02 14:04                   ` [Nouveau] " David Laight
2022-03-02 14:04                   ` [Intel-gfx] " David Laight
2022-03-02 14:04                   ` David Laight
2022-03-02 14:04                   ` David Laight
2022-03-02 14:04                   ` [f2fs-dev] " David Laight
2022-03-03  2:27                   ` Xiaomeng Tong
2022-03-03  2:27                     ` [Intel-wired-lan] " Xiaomeng Tong
2022-03-03  2:27                     ` [Nouveau] " Xiaomeng Tong
2022-03-03  2:27                     ` [Intel-gfx] " Xiaomeng Tong
2022-03-03  2:27                     ` Xiaomeng Tong
2022-03-03  2:27                     ` Xiaomeng Tong
2022-03-03  2:27                     ` [f2fs-dev] " Xiaomeng Tong
2022-03-03  4:58                     ` David Laight
2022-03-03  4:58                       ` [Intel-wired-lan] " David Laight
2022-03-03  4:58                       ` [Nouveau] " David Laight
2022-03-03  4:58                       ` David Laight
2022-03-03  4:58                       ` [Intel-gfx] " David Laight
2022-03-03  4:58                       ` David Laight
2022-03-03  4:58                       ` [f2fs-dev] " David Laight
2022-03-03  7:26                       ` Xiaomeng Tong
2022-03-03  7:26                         ` [Intel-wired-lan] " Xiaomeng Tong
2022-03-03  7:26                         ` [Nouveau] " Xiaomeng Tong
2022-03-03  7:26                         ` [Intel-gfx] " Xiaomeng Tong
2022-03-03  7:26                         ` Xiaomeng Tong
2022-03-03  7:26                         ` Xiaomeng Tong
2022-03-03  7:26                         ` [f2fs-dev] " Xiaomeng Tong
2022-03-03  9:30                         ` David Laight
2022-03-03  9:30                           ` [Intel-wired-lan] " David Laight
2022-03-03  9:30                           ` [Nouveau] " David Laight
2022-03-03  9:30                           ` [Intel-gfx] " David Laight
2022-03-03  9:30                           ` David Laight
2022-03-03  9:30                           ` David Laight
2022-03-03  9:30                           ` [f2fs-dev] " David Laight
2022-03-03 12:37                           ` Xiaomeng Tong
2022-03-03 12:37                             ` [Intel-wired-lan] " Xiaomeng Tong
2022-03-03 12:37                             ` [Nouveau] " Xiaomeng Tong
2022-03-03 12:37                             ` [Intel-gfx] " Xiaomeng Tong
2022-03-03 12:37                             ` Xiaomeng Tong
2022-03-03 12:37                             ` Xiaomeng Tong
2022-03-03 12:37                             ` [f2fs-dev] " Xiaomeng Tong
2022-03-03 12:18                         ` [Kgdb-bugreport] " Daniel Thompson
2022-03-03 12:18                           ` [Intel-wired-lan] " Daniel Thompson
2022-03-03 12:18                           ` [Nouveau] " Daniel Thompson
2022-03-03 12:18                           ` [f2fs-dev] " Daniel Thompson
2022-03-03 12:18                           ` Daniel Thompson
2022-03-03 12:18                           ` [Intel-gfx] " Daniel Thompson
2022-03-03 12:18                           ` Daniel Thompson
2022-03-04  6:59                           ` Xiaomeng Tong [this message]
2022-03-04  6:59                             ` [Intel-wired-lan] " Xiaomeng Tong
2022-03-04  6:59                             ` [Nouveau] " Xiaomeng Tong
2022-03-04  6:59                             ` [Intel-gfx] " Xiaomeng Tong
2022-03-04  6:59                             ` Xiaomeng Tong
2022-03-04  6:59                             ` Xiaomeng Tong
2022-03-04  6:59                             ` [f2fs-dev] " Xiaomeng Tong
2022-03-03  7:32                       ` Jakob Koschel
2022-03-03  7:32                         ` [Intel-wired-lan] " Jakob Koschel
2022-03-03  7:32                         ` [Nouveau] " Jakob Koschel
2022-03-03  7:32                         ` [Intel-gfx] " Jakob Koschel
2022-03-03  7:32                         ` Jakob Koschel
2022-03-03  7:32                         ` Jakob Koschel
2022-03-03  7:32                         ` [f2fs-dev] " Jakob Koschel
2022-03-03  8:30                         ` Xiaomeng Tong
2022-03-03  8:30                           ` [Intel-wired-lan] " Xiaomeng Tong
2022-03-03  8:30                           ` [Nouveau] " Xiaomeng Tong
2022-03-03  8:30                           ` [Intel-gfx] " Xiaomeng Tong
2022-03-03  8:30                           ` Xiaomeng Tong
2022-03-03  8:30                           ` Xiaomeng Tong
2022-03-03  8:30                           ` [f2fs-dev] " Xiaomeng Tong
2022-03-03  8:38                           ` Xiaomeng Tong
2022-03-03  8:38                             ` [Intel-wired-lan] " Xiaomeng Tong
2022-03-03  8:38                             ` [Nouveau] " Xiaomeng Tong
2022-03-03  8:38                             ` [Intel-gfx] " Xiaomeng Tong
2022-03-03  8:38                             ` Xiaomeng Tong
2022-03-03  8:38                             ` Xiaomeng Tong
2022-03-03  8:38                             ` [f2fs-dev] " Xiaomeng Tong
2022-02-28 20:07       ` Christian König
2022-02-28 20:07         ` [Intel-wired-lan] " Christian =?unknown-8bit?q?K=C3=B6nig?=
2022-02-28 20:07         ` [Nouveau] " Christian König
2022-02-28 20:07         ` [f2fs-dev] " Christian König via Linux-f2fs-devel
2022-02-28 20:07         ` [Intel-gfx] " Christian König
2022-02-28 20:07         ` Christian König
2022-02-28 20:07         ` Christian König
2022-02-28 20:42         ` James Bottomley
2022-02-28 20:42           ` [Intel-wired-lan] " James Bottomley
2022-02-28 20:42           ` [Nouveau] " James Bottomley
2022-02-28 20:42           ` [f2fs-dev] " James Bottomley
2022-02-28 20:42           ` [Intel-gfx] " James Bottomley
2022-02-28 20:42           ` James Bottomley
2022-02-28 20:42           ` James Bottomley
2022-02-28 20:56           ` Christian König
2022-02-28 20:56             ` [Intel-wired-lan] " Christian =?unknown-8bit?q?K=C3=B6nig?=
2022-02-28 20:56             ` [Nouveau] " Christian König
2022-02-28 20:56             ` [f2fs-dev] " Christian König via Linux-f2fs-devel
2022-02-28 20:56             ` [Intel-gfx] " Christian König
2022-02-28 20:56             ` Christian König
2022-02-28 20:56             ` Christian König
2022-02-28 21:13             ` James Bottomley
2022-02-28 21:13               ` [Intel-wired-lan] " James Bottomley
2022-02-28 21:13               ` [Nouveau] " James Bottomley
2022-02-28 21:13               ` [Intel-gfx] " James Bottomley
2022-02-28 21:13               ` James Bottomley
2022-02-28 21:13               ` James Bottomley
2022-02-28 21:13               ` [f2fs-dev] " James Bottomley
2022-03-01  7:03               ` Christian König
2022-03-01  7:03                 ` [Intel-wired-lan] " Christian =?unknown-8bit?q?K=C3=B6nig?=
2022-03-01  7:03                 ` [Nouveau] " Christian König
2022-03-01  7:03                 ` [Intel-gfx] " Christian König
2022-03-01  7:03                 ` Christian König
2022-03-01  7:03                 ` Christian König
2022-03-01  7:03                 ` [f2fs-dev] " Christian König via Linux-f2fs-devel
2022-02-28 22:05             ` Jakob Koschel
2022-02-28 22:05               ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 22:05               ` [Intel-gfx] " Jakob Koschel
2022-02-28 22:05               ` [Nouveau] " Jakob Koschel
2022-02-28 22:05               ` Jakob Koschel
2022-02-28 22:05               ` Jakob Koschel
2022-02-28 22:05               ` [f2fs-dev] " Jakob Koschel
2022-02-28 21:18           ` Jeffrey Walton
2022-02-28 21:18             ` [Intel-wired-lan] " Jeffrey Walton
2022-02-28 21:18             ` [Intel-gfx] " Jeffrey Walton
2022-02-28 21:18             ` [Nouveau] " Jeffrey Walton
2022-02-28 21:18             ` Jeffrey Walton
2022-02-28 21:18             ` Jeffrey Walton
2022-02-28 21:18             ` [f2fs-dev] " Jeffrey Walton
2022-02-28 21:59           ` Mike Rapoport
2022-02-28 21:59             ` [Intel-wired-lan] " Mike Rapoport
2022-02-28 21:59             ` [Intel-gfx] " Mike Rapoport
2022-02-28 21:59             ` [Nouveau] " Mike Rapoport
2022-02-28 21:59             ` Mike Rapoport
2022-02-28 21:59             ` Mike Rapoport
2022-02-28 21:59             ` [f2fs-dev] " Mike Rapoport
2022-02-28 22:28             ` James Bottomley
2022-02-28 22:28               ` [Intel-wired-lan] " James Bottomley
2022-02-28 22:28               ` [Nouveau] " James Bottomley
2022-02-28 22:28               ` [Intel-gfx] " James Bottomley
2022-02-28 22:28               ` James Bottomley
2022-02-28 22:28               ` James Bottomley
2022-02-28 22:28               ` [f2fs-dev] " James Bottomley
2022-02-28 22:50               ` Barnabás Pőcze
2022-02-28 22:50                 ` [Intel-wired-lan] " =?unknown-8bit?q?Barnab=C3=A1s_P=C5=91cze?=
2022-02-28 22:50                 ` [Intel-gfx] " Barnabás Pőcze
2022-02-28 22:50                 ` [Nouveau] " Barnabás Pőcze
2022-02-28 22:50                 ` Barnabás Pőcze
2022-02-28 22:50                 ` Barnabás Pőcze
2022-02-28 22:50                 ` [f2fs-dev] " Barnabás Pőcze via Linux-f2fs-devel
2022-03-01  0:30               ` Segher Boessenkool
2022-03-01  0:30                 ` [Intel-wired-lan] " Segher Boessenkool
2022-03-01  0:30                 ` [Intel-gfx] " Segher Boessenkool
2022-03-01  0:30                 ` [Nouveau] " Segher Boessenkool
2022-03-01  0:30                 ` [f2fs-dev] " Segher Boessenkool
2022-03-01  0:30                 ` Segher Boessenkool
2022-03-01  0:30                 ` Segher Boessenkool
2022-03-01  0:54                 ` Linus Torvalds
2022-03-01  0:54                   ` [Intel-wired-lan] " Linus Torvalds
2022-03-01  0:54                   ` [Nouveau] " Linus Torvalds
2022-03-01  0:54                   ` [f2fs-dev] " Linus Torvalds
2022-03-01  0:54                   ` Linus Torvalds
2022-03-01  0:54                   ` Linus Torvalds
2022-03-01  0:54                   ` [Intel-gfx] " Linus Torvalds
2022-03-01 19:06               ` Linus Torvalds
2022-03-01 19:06                 ` [Intel-wired-lan] " Linus Torvalds
2022-03-01 19:06                 ` [Nouveau] " Linus Torvalds
2022-03-01 19:06                 ` Linus Torvalds
2022-03-01 19:06                 ` Linus Torvalds
2022-03-01 19:06                 ` [f2fs-dev] " Linus Torvalds
2022-03-01 19:06                 ` [Intel-gfx] " Linus Torvalds
2022-03-01 19:42                 ` Linus Torvalds
2022-03-01 19:42                   ` [Intel-wired-lan] " Linus Torvalds
2022-03-01 19:42                   ` [Nouveau] " Linus Torvalds
2022-03-01 19:42                   ` [Intel-gfx] " Linus Torvalds
2022-03-01 19:42                   ` [f2fs-dev] " Linus Torvalds
2022-03-01 19:42                   ` Linus Torvalds
2022-03-01 19:42                   ` Linus Torvalds
2022-03-01 22:58                 ` David Laight
2022-03-01 22:58                   ` [Intel-wired-lan] " David Laight
2022-03-01 22:58                   ` [Nouveau] " David Laight
2022-03-01 22:58                   ` David Laight
2022-03-01 22:58                   ` [f2fs-dev] " David Laight
2022-03-01 22:58                   ` [Intel-gfx] " David Laight
2022-03-01 22:58                   ` David Laight
2022-03-01 23:03                   ` Linus Torvalds
2022-03-01 23:03                     ` [Intel-wired-lan] " Linus Torvalds
2022-03-01 23:03                     ` [Nouveau] " Linus Torvalds
2022-03-01 23:03                     ` Linus Torvalds
2022-03-01 23:03                     ` Linus Torvalds
2022-03-01 23:03                     ` [Intel-gfx] " Linus Torvalds
2022-03-01 23:03                     ` [f2fs-dev] " Linus Torvalds
2022-03-01 23:19                     ` David Laight
2022-03-01 23:19                       ` [Intel-wired-lan] " David Laight
2022-03-01 23:19                       ` [Nouveau] " David Laight
2022-03-01 23:19                       ` [f2fs-dev] " David Laight
2022-03-01 23:19                       ` [Intel-gfx] " David Laight
2022-03-01 23:19                       ` David Laight
2022-03-01 23:19                       ` David Laight
2022-03-01 23:55                       ` Linus Torvalds
2022-03-01 23:55                         ` [Intel-wired-lan] " Linus Torvalds
2022-03-01 23:55                         ` [Nouveau] " Linus Torvalds
2022-03-01 23:55                         ` Linus Torvalds
2022-03-01 23:55                         ` [f2fs-dev] " Linus Torvalds
2022-03-01 23:55                         ` [Intel-gfx] " Linus Torvalds
2022-03-01 23:55                         ` Linus Torvalds
2022-03-02  9:29                         ` Rasmus Villemoes
2022-03-02  9:29                           ` [Intel-wired-lan] " Rasmus Villemoes
2022-03-02  9:29                           ` [Nouveau] " Rasmus Villemoes
2022-03-02  9:29                           ` [f2fs-dev] " Rasmus Villemoes
2022-03-02  9:29                           ` [Intel-gfx] " Rasmus Villemoes
2022-03-02  9:29                           ` Rasmus Villemoes
2022-03-02  9:29                           ` Rasmus Villemoes
2022-03-02 20:07                           ` Kees Cook
2022-03-02 20:07                             ` [Intel-wired-lan] " Kees Cook
2022-03-02 20:07                             ` [Nouveau] " Kees Cook
2022-03-02 20:07                             ` [Intel-gfx] " Kees Cook
2022-03-02 20:07                             ` Kees Cook
2022-03-02 20:07                             ` Kees Cook
2022-03-02 20:07                             ` [f2fs-dev] " Kees Cook
2022-03-02 20:18                             ` Linus Torvalds
2022-03-02 20:18                               ` [Intel-wired-lan] " Linus Torvalds
2022-03-02 20:18                               ` [Nouveau] " Linus Torvalds
2022-03-02 20:18                               ` Linus Torvalds
2022-03-02 20:18                               ` [Intel-gfx] " Linus Torvalds
2022-03-02 20:18                               ` Linus Torvalds
2022-03-02 20:18                               ` [f2fs-dev] " Linus Torvalds
2022-03-02 20:59                               ` Kees Cook
2022-03-02 20:59                                 ` [Intel-wired-lan] " Kees Cook
2022-03-02 20:59                                 ` [Nouveau] " Kees Cook
2022-03-02 20:59                                 ` [Intel-gfx] " Kees Cook
2022-03-02 20:59                                 ` Kees Cook
2022-03-02 20:59                                 ` Kees Cook
2022-03-02 20:59                                 ` [f2fs-dev] " Kees Cook
2022-03-03  8:37                             ` Dan Carpenter
2022-03-03  8:37                               ` [Intel-wired-lan] " Dan Carpenter
2022-03-03  8:37                               ` [Nouveau] " Dan Carpenter
2022-03-03  8:37                               ` [f2fs-dev] " Dan Carpenter
2022-03-03  8:37                               ` Dan Carpenter
2022-03-03  8:37                               ` [Intel-gfx] " Dan Carpenter
2022-03-03  8:37                               ` Dan Carpenter
2022-03-03 10:56                           ` Dan Carpenter
2022-03-03 10:56                             ` [Intel-wired-lan] " Dan Carpenter
2022-03-03 10:56                             ` [Nouveau] " Dan Carpenter
2022-03-03 10:56                             ` Dan Carpenter
2022-03-03 10:56                             ` [f2fs-dev] " Dan Carpenter
2022-03-03 10:56                             ` [Intel-gfx] " Dan Carpenter
2022-03-03 10:56                             ` Dan Carpenter
2022-03-01  2:15       ` David Laight
2022-03-01  2:15         ` [Intel-wired-lan] " David Laight
2022-03-01  2:15         ` [Nouveau] " David Laight
2022-03-01  2:15         ` [f2fs-dev] " David Laight
2022-03-01  2:15         ` [Intel-gfx] " David Laight
2022-03-01  2:15         ` David Laight
2022-03-01  2:15         ` David Laight
2022-02-28 13:13   ` Dan Carpenter
2022-02-28 13:13     ` [Nouveau] " Dan Carpenter
2022-02-28 13:13     ` Dan Carpenter
2022-02-28 13:13     ` [Intel-gfx] " Dan Carpenter
2022-02-28 13:13     ` Dan Carpenter
2022-02-28 13:13     ` [f2fs-dev] " Dan Carpenter
2022-02-28 11:08 ` [PATCH 3/6] treewide: fix incorrect use to determine if list is empty Jakob Koschel
2022-02-28 11:08   ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 11:08   ` [Nouveau] " Jakob Koschel
2022-02-28 11:08   ` [Intel-gfx] " Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` [f2fs-dev] " Jakob Koschel
2022-02-28 11:38   ` Dan Carpenter
2022-02-28 11:38     ` [Intel-wired-lan] " Dan Carpenter
2022-02-28 11:38     ` [Nouveau] " Dan Carpenter
2022-02-28 11:38     ` Dan Carpenter
2022-02-28 11:38     ` [f2fs-dev] " Dan Carpenter
2022-02-28 11:38     ` [Intel-gfx] " Dan Carpenter
2022-02-28 11:38     ` Dan Carpenter
2022-02-28 11:08 ` [PATCH 4/6] drivers: remove unnecessary use of list iterator variable Jakob Koschel
2022-02-28 11:08   ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 11:08   ` [Nouveau] " Jakob Koschel
2022-02-28 11:08   ` [Intel-gfx] " Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` [f2fs-dev] " Jakob Koschel
2022-02-28 11:08 ` [PATCH 5/6] treewide: remove dereference of list iterator after loop body Jakob Koschel
2022-02-28 11:08   ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 11:08   ` [Nouveau] " Jakob Koschel
2022-02-28 11:08   ` [Intel-gfx] " Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` [f2fs-dev] " Jakob Koschel
2022-02-28 11:08 ` [PATCH 6/6] treewide: remove check of list iterator against head past the " Jakob Koschel
2022-02-28 11:08   ` [Intel-wired-lan] " Jakob Koschel
2022-02-28 11:08   ` [Nouveau] " Jakob Koschel
2022-02-28 11:08   ` [Intel-gfx] " Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` Jakob Koschel
2022-02-28 11:08   ` [f2fs-dev] " Jakob Koschel
2022-02-28 11:22   ` Dominique Martinet
2022-02-28 11:22     ` [Intel-wired-lan] " Dominique Martinet
2022-02-28 11:22     ` [Nouveau] " Dominique Martinet
2022-02-28 11:22     ` [Intel-gfx] " Dominique Martinet
2022-02-28 11:22     ` Dominique Martinet
2022-02-28 11:22     ` Dominique Martinet
2022-02-28 11:22     ` Dominique Martinet
2022-02-28 13:12   ` Dan Carpenter
2022-02-28 13:12     ` [Nouveau] " Dan Carpenter
2022-02-28 13:12     ` Dan Carpenter
2022-02-28 13:12     ` [f2fs-dev] " Dan Carpenter
2022-02-28 13:12     ` [Intel-gfx] " Dan Carpenter
2022-02-28 13:12     ` Dan Carpenter
2022-03-01 20:36   ` Linus Torvalds
2022-03-01 20:36     ` [Intel-wired-lan] " Linus Torvalds
2022-03-01 20:36     ` [Nouveau] " Linus Torvalds
2022-03-01 20:36     ` [f2fs-dev] " Linus Torvalds
2022-03-01 20:36     ` Linus Torvalds
2022-03-01 20:36     ` Linus Torvalds
2022-03-01 20:36     ` [Intel-gfx] " Linus Torvalds
2022-03-02 17:14   ` Tvrtko Ursulin
2022-03-02 17:14     ` [Intel-wired-lan] " Tvrtko Ursulin
2022-03-02 17:14     ` [Nouveau] " Tvrtko Ursulin
2022-03-02 17:14     ` [f2fs-dev] " Tvrtko Ursulin
2022-03-02 17:14     ` Tvrtko Ursulin
2022-03-02 17:14     ` Tvrtko Ursulin
2022-03-01  0:27 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Remove usage of list iterator past the loop body (rev2) Patchwork
2022-03-01  2:38 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Remove usage of list iterator past the loop body (rev3) Patchwork
2022-03-01 22:57 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Remove usage of list iterator past the loop body (rev4) Patchwork
2022-03-03 11:27 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Remove usage of list iterator past the loop body (rev5) Patchwork
2022-03-03 11:59 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-03-03 16:59 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2022-03-07 15:00 ` [PATCH 0/6] Remove usage of list iterator past the loop body Dan Carpenter
2022-03-07 15:00   ` [Intel-wired-lan] " Dan Carpenter
2022-03-07 15:00   ` [Nouveau] " Dan Carpenter
2022-03-07 15:00   ` Dan Carpenter
2022-03-07 15:00   ` [f2fs-dev] " Dan Carpenter
2022-03-07 15:00   ` [Intel-gfx] " Dan Carpenter
2022-03-07 15:00   ` Dan Carpenter
2022-03-07 15:26   ` David Laight
2022-03-07 15:26     ` [Intel-wired-lan] " David Laight
2022-03-07 15:26     ` [Nouveau] " David Laight
2022-03-07 15:26     ` [Intel-gfx] " David Laight
2022-03-07 15:26     ` David Laight
2022-03-07 15:26     ` David Laight
2022-03-07 15:26     ` [f2fs-dev] " David Laight
2022-03-07 19:15     ` Linus Torvalds

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220304065957.16799-1-xiam0nd.tong@gmail.com \
    --to=xiam0nd.tong@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=arnd@arndb.de \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=bjohannesmeyer@gmail.com \
    --cc=c.giuffrida@vu.nl \
    --cc=christian.koenig@amd.com \
    --cc=christophe.jaillet@wanadoo.fr \
    --cc=dan.carpenter@oracle.com \
    --cc=daniel.thompson@linaro.org \
    --cc=david.laight@aculab.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=drbd-dev@lists.linbit.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gustavo@embeddedor.com \
    --cc=h.j.bos@vu.nl \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-wired-lan@lists.osuosl.org \
    --cc=jakobkoschel@gmail.com \
    --cc=jgg@ziepe.ca \
    --cc=keescook@chromium.org \
    --cc=kgdb-bugreport@lists.sourceforge.net \
    --cc=kvm@vger.kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-aspeed@lists.ozlabs.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-cifs@vger.kernel.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux-sgx@vger.kernel.org \
    --cc=linux-staging@lists.linux.dev \
    --cc=linux-tegra@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linux1394-devel@lists.sourceforge.net \
    --cc=linux@rasmusvillemoes.dk \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=nathan@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nouveau@lists.freedesktop.org \
    --cc=rppt@kernel.org \
    --cc=samba-technical@lists.samba.org \
    --cc=tglx@linutronix.de \
    --cc=tipc-discussion@lists.sourceforge.net \
    --cc=torvalds@linux-foundation.org \
    --cc=v9fs-developer@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.