DFSan has flags to control flows between pointers and objects referred
by pointers. For example,
a = *p; L(a) = L(*p) when -dfsan-combine-pointer-labels-on-load = false L(a) = L(*p) + L(p) when -dfsan-combine-pointer-labels-on-load = true *p = b; L(*p) = L(b) when -dfsan-combine-pointer-labels-on-store = false L(*p) = L(b) + L(p) when -dfsan-combine-pointer-labels-on-store = true
The question is what to do with p += c.
In practice we found many confusing flows if we propagate labels from c
to p. So a new flag works like this
p += c; L(p) = L(p) when -dfsan-propagate-via-pointer-arithmetic = false L(p) = L(p) + L(c) when -dfsan-propagate-via-pointer-arithmetic = true
Why is this needed?