On Fri, Jun 3, 2016 at 2:26 PM, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: >> >> in the __d_lookup() disassembly. And %rdi contains 2, so there were >> supposed to be two more characters at 'ct' (which is %rdx). > > ... and since r8 and rsi are 0, we couldn't have consumed anything. Right you are. So it really started out page-aligned. >> Why would nd->last.name be bogus? I don't see anything. > > An interesting part is that it's page-aligned. Which is impossible for > a short name obtained by getname(), but is quite likely for a symlink body. > So at a guess, we have a page containing a symlink body freed under us. Hmm. Good point. Is perhaps the "delayed_call" logic broken, and the symlink is free'd too early? That whole set_delayed_call/do_delayed_call thing came in 4.5. Maybe something broke that logic, and we've executed the delayed freeing before we should have. Normally it's done at terminate_walk() time. But I note that in walk_component(), we do put_link(nd) which does a do_delayed_call(), but does *not* do a clear_delayed_call(), so now I think a subsequent terminate_walk() might drop it *again*. I'm probably missing something, but I have to say that the old explicit "put_link()" callback logic was more obvious than the new delayed calls are. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html