Thread (18 messages) 18 messages, 6 authors, 2017-09-16

Re: Use after free in __dst_destroy_metrics_generic

flat view

From: Julian Anastasov <ja@ssi.bg>
Date: 2017-09-15 22:38:28

	Hello,

On Fri, 15 Sep 2017, Eric Dumazet wrote:
On Fri, 2017-09-08 at 09:10 -0700, Cong Wang wrote:
quoted
On Thu, Sep 7, 2017 at 5:52 PM, Subash Abhinov Kasiviswanathan
[off-list ref] wrote:
quoted
We are seeing a possible use after free in ip6_dst_destroy.

It appears as if memory of the __DST_METRICS_PTR(old) was freed in some path
and allocated
to ion driver. ion driver has also freed it. Finally the memory is freed by
the
fib gc and crashes since it is already deallocated.
Does the attach (compile-only) patch help anything?

From my _quick_ glance, it seems we miss the refcnt'ing
right in __dst_destroy_metrics_generic().

Thanks!

Hi Cong

I believe your patch makes a lot of sense, please submit it formally ?
	Cong's patch is wrong for few reasons:

- it will stop to kfree non-refcounted metrics

- report was for IPV6 and we set DST_METRICS_REFCOUNTED only
for IPv4, for DST_METRICS_READ_ONLY metrics

- __dst_destroy_metrics_generic is called for val without
DST_METRICS_READ_ONLY flag and such metrics are not with
DST_METRICS_REFCOUNTED flag

- ->cow_metrics and dst_cow_metrics_generic are called with 
DST_METRICS_READ_ONLY flag set, there is no chance to write
new value twice, especially to write DST_METRICS_REFCOUNTED flag
and later to see this flag in __dst_destroy_metrics_generic

	So, I'm not sure where exactly is the bug with the
metrics.

	May be I'm missing some posting but I don't see if
the patch was tested successfully.

Regards
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help