Apologies all for sitting on this so long. I got slammed around last merge window dropped the ball on a lot of things and I have been slowly working my way through everything and trying to catch up.
Testing for MNT_UNBINDABLE in do_loopback and then failing the copy if it is set anywhere completely breaks the point of MNT_UNBINDABLE and won't work.
Similarly my original idea of not allowing MNT_UNBINDABLE and MNT_LOCKED on the same mount gets very complicated, especially in the case of pivot_root. MNT_UNBINDABLE and MNT_LOCKED are much easier to manage as indepedent flags.
But it turned out handling this in copy_tree is straight forward so I have implemented the check there.
I intend to post this all shortly once I get a little more testing in and figure out the best route for getting these fixes in. The merge window while code is being merged tends to be a bad time for code review unfortunately.
Apologies all for sitting on this so long. I got slammed around last merge window dropped the ball on a lot of things and I have been slowly working my way through everything and trying to catch up.
Testing for MNT_UNBINDABLE in do_loopback and then failing the copy if it is set anywhere completely breaks the point of MNT_UNBINDABLE and won't work.
Similarly my original idea of not allowing MNT_UNBINDABLE and MNT_LOCKED on the same mount gets very complicated, especially in the case of pivot_root. MNT_UNBINDABLE and MNT_LOCKED are much easier to manage as indepedent flags.
But it turned out handling this in copy_tree is straight forward so I have implemented the check there.
I intend to post this all shortly once I get a little more testing in and figure out the best route for getting these fixes in. The merge window while code is being merged tends to be a bad time for code review unfortunately.