On Fri 12-02-21 00:59:29, Mike Rapoport wrote:
On Thu, Feb 11, 2021 at 01:30:42PM +0100, Michal Hocko wrote:
[...]
Have a look how hugetlb proliferates through our MM APIs. I strongly suspect this is strong signal that this won't be any different.
And even if yes, adding SECRETMEM_HUGE flag seems to me less confusing than saying "from kernel x.y you can use MFD_CREATE | MFD_SECRET | MFD_HUGE" etc for all possible combinations.
I really fail to see your point. This is a standard model we have. It is quite natural that flags are added. Moreover adding a new syscall will not make it any less of a problem.
Nowadays adding a new syscall is not as costly as it used to be. And I think it'll provide better extensibility when new features would be added to secretmem.
For instance, for creating a secretmem fd backed with sealing we'd have
memfd_secretm(SECRETMEM_HUGE);
You mean SECRETMEM_HUGE_1G_AND_SEALED or SECRET_HUGE_2MB_WITHOUT_SEALED? This would be rather an antipatern to our flags design, no? Really there are orthogonal requirements here and there is absolutely zero reason to smash everything into a single thing. It is just perfectly fine to combine those functionalities without a pre-described way how to do that.
rather than
memfd_create(MFD_ALLOW_SEALING | MFD_HUGETLB | MFD_SECRET);
Besides, if we overload memfd_secret we add complexity to flags validation of allowable flag combinations even with the simplest initial implementation.
This is the least of my worry, really. The existing code in memfd_create, unlike others legacy interfaces, allows extensions just fine.
And what it will become when more features are added to secretmem?
Example?
I by no means do not insist one way or the other but from what I have seen so far I have a feeling that the interface hasn't been thought through enough.
It has been, but we have different thoughts about it ;-)
Then you must be carrying a lot of implicit knowledge which I want you to document.
I don't have any implicit knowledge, we just have a different perspective.
OK, I will stop discussing now because it doesn't really seem to lead anywhere.
Just to recap my current understanding. Your main argument so far is that this is somehow special and you believe it would be confusing to use an existing interface. I beg to disagree here because memfd interface is exactly a way to get a file handle to describe a memory which is what you want. About the only thing that secretmem is special is that it only operates on mapped areas and read/write interface is not supported (but I do not see a fundamental reason this couldn't be added in the future). All the rest is just operating on a memory backed file. I envison the hugetlb support will follow and sealing sounds like a useful thing to be requested as well. All that would have to be added to a new syscall over time and then we will land at two parallel interface supporting a largerly overlapping feature set.
To me all the above sounds to be much stronher argument than your worry this might be confusing.
I will not insist on this but you should have some more thought on those arguments.