summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/pseudo/files/delete_mismatches.patch
blob: 6c78d787c785bf944207bec9cb9cd29c949babbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
When we see cases where the inode no longer matches the file path, pseudo 
notices but currently reuses the database entry. This can happen where for
example, a file is deleted and a new file created outside of pseudo where
the inode number is reused.

Change this to ignore the likely stale database entry instead. We're
seeing bugs where inode reuse for deleted files causes permission corruption.
(See bug #14057 for example). We don't want to delete the database entry
as the permissions may need to be applied to that file (and testing shows
we do need the path matching code which handles that).

I appreciate this should never happen under the original design of pseudo
where all file accesses are monitored by pseudo. The reality is to do that,
we'd have to run pseudo:

a) for all tasks
b) as one pseudo database for all of TMPDIR

Neither of these is realistically possible for performance reasons.

I believe pseudo to be much better at catching all accesses than it
might once have been. As such, these "fixups" are in the cases I've
seen in the logs, always incorrect.

It therefore makes more sense to ignore the database data rather than
corrupt the file permissions or worse. Looking at the pseudo logs
in my heavily reused build directories, the number of these
errors is staggering. This issue would explain many weird bugs we've
seen over the years.

There is a risk that we could not map permissions in some case where
we currently would. I have not seen evidence of this in any logs I've
read though. This change, whilst going against the original design,
is in my view the safer option for the project at this point given we
don't use pseudo as originally designed and never will be able to.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Upstream-Status: Pending

Index: git/pseudo.c
===================================================================
--- git.orig/pseudo.c
+++ git/pseudo.c
@@ -699,6 +701,7 @@ pseudo_op(pseudo_msg_t *msg, const char
 						(unsigned long long) msg_header.ino,
 						path_by_ino ? path_by_ino : "no path",
 						msg->path);
+					found_ino = 0;
 				}
 			}
 		} else {