<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 03:03:36 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Whamcloud Community JIRA</title>
    <link>https://jira.whamcloud.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.4.14</version>
        <build-number>940014</build-number>
        <build-date>05-12-2023</build-date>
    </build-info>


<item>
            <title>[LU-13717] Client-side encryption - support file name encryption</title>
                <link>https://jira.whamcloud.com/browse/LU-13717</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;This ticket is a place-holder to describe work to be done for client-side file name encryption. This is a follow-up of &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-12275&quot; title=&quot;Client-side file data encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-12275&quot;&gt;&lt;del&gt;LU-12275&lt;/del&gt;&lt;/a&gt;, so all principles and concepts detailed there are still valid.&lt;/p&gt;

&lt;p&gt;In particular, filename encryption principles are explained in this document:&lt;br/&gt;
&lt;a href=&quot;https://jira.whamcloud.com/secure/attachment/32657/lustre_encryption_modes_usage.txt&quot; class=&quot;external-link&quot; rel=&quot;nofollow&quot;&gt;https://jira.whamcloud.com/secure/attachment/32657/lustre_encryption_modes_usage.txt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Further details will be added as the feature design makes progress.&lt;/p&gt;</description>
                <environment></environment>
        <key id="59726">LU-13717</key>
            <summary>Client-side encryption - support file name encryption</summary>
                <type id="2" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11311&amp;avatarType=issuetype">New Feature</type>
                                            <priority id="4" iconUrl="https://jira.whamcloud.com/images/icons/priorities/minor.svg">Minor</priority>
                        <status id="5" iconUrl="https://jira.whamcloud.com/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="sebastien">Sebastien Buisson</assignee>
                                    <reporter username="sebastien">Sebastien Buisson</reporter>
                        <labels>
                            <label>encryption</label>
                            <label>sec</label>
                    </labels>
                <created>Thu, 25 Jun 2020 16:28:41 +0000</created>
                <updated>Tue, 20 Sep 2022 18:09:04 +0000</updated>
                            <resolved>Tue, 18 Jan 2022 15:32:15 +0000</resolved>
                                                    <fixVersion>Lustre 2.15.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>8</watches>
                                                                            <comments>
                            <comment id="273754" author="sebastien" created="Thu, 25 Jun 2020 16:29:42 +0000"  >&lt;p&gt;One of the consequences of file name encryption is that ciphertext names are no longer valid file names, and not even well-formed strings, because they are binary data. These ciphertext names are sent between clients and servers to ensure data privacy.&lt;/p&gt;

&lt;p&gt;Because the underlying fscrypt API supports file names of up to NAME_MAX length, the ciphertext names cannot be base64 encoded (or similar) before being sent to server side. Otherwise the NAME_MAX limit would be exceeded, as encoding binary into text does not have a 100% space efficiency (e.g. base64 has 75%).&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;this implies that &lt;tt&gt;RMF_NAME&lt;/tt&gt; cannot be considered any longer as a string in ptlrpc requests. Similarly, when packing file names, they cannot be checked with &lt;tt&gt;lu_name_is_valid*()&lt;/tt&gt;.&lt;/li&gt;
	&lt;li&gt;another implication is in the OSD layer on server side. All file names are currently treated as &lt;tt&gt;char *&lt;/tt&gt;, which cannot work with ciphertext names.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;For the OSD layer, it could be possible to change how &lt;tt&gt;struct dt_key *&lt;/tt&gt; parameters are passed: instead of just a &lt;tt&gt;char *&lt;/tt&gt;, it could be turned into a &lt;tt&gt;struct lu_name *&lt;/tt&gt;, so that the actual size of the parameter is correctly handled, and carefully passed to the backend fs layer. Even on CentOS 7 ldiskfs seems capable of handling &apos;binary names&apos;, and ZFS should as well.&lt;br/&gt;
However, this change draws many code modifications under &lt;tt&gt;lustre/lfsck&lt;/tt&gt;, &lt;tt&gt;lustre/md*&lt;/tt&gt; (server side), &lt;tt&gt;lustre/obdclass&lt;/tt&gt;, &lt;tt&gt;lustre/osd-*&lt;/tt&gt; and &lt;tt&gt;lustre/target&lt;/tt&gt;, so it has to be thought thoroughly.&lt;/p&gt;</comment>
                            <comment id="273781" author="adilger" created="Thu, 25 Jun 2020 21:33:36 +0000"  >&lt;p&gt;I think it is important to check how this is handled with upstream ext4?  My understanding is that they use some form of encoding (base64 or similar), which allows encrypted filenames of up to &lt;tt&gt;NAME_MAX-16 = 240&lt;/tt&gt; characters.  Having semi-normal filenames (e.g. avoiding non-printable characters) avoids significant problems with the code and tools.&lt;/p&gt;

&lt;p&gt;For ext4 htree directory hashing, these encoded names are used to determine the htree leaf/bucket that they are inserted into, and the names are only decrypted for display if the user has the key in their keyring, and incoming names are encrypted before being passed to the lower layers.  All filesystem operations are done on the cyphertext name so that it still works properly if the user does not have the key (e.g. the admin can still list and delete such files).  &lt;/p&gt;</comment>
                            <comment id="273804" author="sebastien" created="Fri, 26 Jun 2020 07:19:03 +0000"  >&lt;p&gt;ext4 relies entirely&#160;on fscrypt for encryption support. As&#160;fscrypt allows the full 255 bytes (NAME_MAX), so does ext4. Clear text file names are NUL-padded to a 32-byte boundary, in order to reduce leakage of filename lengths via their ciphertexts, and then encrypted. The resulting ciphertext has the same length as the NUL-padded clear text.&lt;br/&gt;
This means ext4 cannot make use of any form of binary-to-text encoding internally, otherwise file names would exceed the NAME_MAX limit.&lt;/p&gt;

&lt;p&gt;fscrypt does make use of base64 encoding however, in order to present files in case the encryption key has not been provided. This is what they call the conversion from disk space to user space, and it still allows for lookup and unlink for instance when the key is not available. When the base64 encoding of the ciphertext name to be presented to &apos;user space&apos; would exceed NAME_MAX, fscrypt uses an abbreviated form, that is built from base64-encoded partial ciphertext concatenated to hash and minor hash provided by the file system (see fscrypt_digest_name in include/linux/fscrypt.h).&lt;/p&gt;</comment>
                            <comment id="278986" author="sebastien" created="Tue, 8 Sep 2020 07:44:08 +0000"  >&lt;p&gt;Another consequence of file name encryption comes from the need to allow a number of syscalls when accessing Lustre &lt;b&gt;without the key&lt;/b&gt;:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;read file metadata (stat);&lt;/li&gt;
	&lt;li&gt;list directories;&lt;/li&gt;
	&lt;li&gt;remove files and directories.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The standard way for fscrypt to address this use case is to provide users with an encoded version of the cipher text names. More specifically, cipher text names are base64 encoded and presented to users. These &apos;scrambled&apos; names can be used to stat, list, and remove directory entries without the encryption key.&lt;br/&gt;
Problem is base64 encoding has a 75% space efficiency. So it would not be possible to present to users the encoded version of a &lt;tt&gt;NAME_MAX&lt;/tt&gt; long cipher text name. To work around this, fscrypt instead computes a digested, abbreviated form of long cipher text names (longer than 32 bytes currently). This means lookup operations have to compared this digested name with the digested form of directory entries in order to find a match (this is what &lt;tt&gt;fscrypt_match_name()&lt;/tt&gt; function does).&lt;/p&gt;

&lt;p&gt;With Lustre, we cannot leverage this mechanism, as server side is not (entirely) aware of encryption. So we differ a little bit from fscrypt internal implementation, and benefit from Lustre specificities to provide users with our own digested form of cipher text names: this is the base64 encoding of this structure:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;struct ll_digest_filename {
	struct lu_fid ldf_fid;
	char ldf_hash[0];
};
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;tt&gt;ldf_fid&lt;/tt&gt; is the file&apos;s FID, and is 16 bytes long.&lt;br/&gt;
&lt;tt&gt;ldf_hash&lt;/tt&gt; is the computed hash of the cipher text name.&lt;br/&gt;
Because we do not want fscrypt to try to make a digest of this Lustre-specific digested name, its whole length must fit into 32 bytes. So we use md5sum hash algorithm to generate a 16 bytes long hash of the cipher text name. Moreover, base64 encoding is in this case guaranteed to be (far) shorter than &lt;tt&gt;NAME_MAX&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;When users do lookup, getattr or unlink operations on such digested names, Lustre client side extracts the FID and the hash. Those are put in the request sent to server side, the hash being substituted to the usual name. So we leverage Lustre&apos;s ability to perform operations on FIDs, but the hash is still necessary to make the difference between hard links. Indeed, server side needs to read LinkEA on the object corresponding to FID, and find the name whose md5sum matches the provided hash.&lt;/p&gt;</comment>
                            <comment id="279161" author="paf0186" created="Wed, 9 Sep 2020 16:36:57 +0000"  >&lt;p&gt;I like this choice to use the FID here - It seems sound.&lt;/p&gt;

&lt;p&gt;One thought - It&apos;s probably unnecessary to do any md5 hashing of the cipher text name, we could simply &lt;b&gt;truncate&lt;/b&gt;&#160;the on-disk cipher text name to create the name derived (rather than FID derived) portion of the file name.&#160; There should be no issue with revealing a particular number of bytes of the ciphertext name (given that it is bytes of the ciphertext name, without connection to the plain text name).&#160; And there&apos;s no reason to expect an md5 hash of the full name in to the smaller byte range to be less (or more) likely to collide vs a truncated cipher text name - both should be effectively random from an outside perspective.&lt;/p&gt;</comment>
                            <comment id="279188" author="adilger" created="Wed, 9 Sep 2020 23:02:44 +0000"  >&lt;p&gt;I agree with Patrick, I don&apos;t think there is a requirement to re-hash the cyphertext name to use for ldf_hash[], it could just be truncated to fit the 16-byte name.  The tradeoff is lack of uniqueness vs. a longer name, but with relatively uniform hash distribution a 16-byte base64 encoded name would have 2^96 different filename combinations, so the chance of a birthday paradox collision would be about 1-in-2^48, which is still very large (1-in-256T) and we are not likely to have directories that large any time soon.  We would still need to base64 encode ll_digest_filename because the FID will very likely have NUL bytes in it.&lt;/p&gt;

&lt;p&gt;One potential problem I see is that standard base64 is using &apos;&lt;tt&gt;/&lt;/tt&gt;&apos; as one of the characters, in addition to &lt;tt&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;a-zA-Z+&amp;#93;&lt;/span&gt;&lt;/tt&gt;, so presumably fscrypt is using a modified base64 encoding that uses some other character (e.g. &apos;&lt;tt&gt;-&lt;/tt&gt;&apos; or &apos;&lt;tt&gt;_&lt;/tt&gt;&apos;)?&lt;/p&gt;

&lt;p&gt;I was also temporarily concerned that the inclusion of the FID in the digest filename would expose some information, but in fact, the FID is still exposed with &lt;tt&gt;readdir()&lt;/tt&gt; and any number of other interfaces, and the FID (inode number) is in fact not considered a &quot;secret&quot; for fscrypt at all.&lt;/p&gt;

&lt;p&gt;A larger problem is that the &lt;tt&gt;linkEA&lt;/tt&gt; is &lt;b&gt;not&lt;/b&gt; guaranteed to contain all of the links of a filename.  Also, by that point, if the server needs to use the hashed name to disambiguate hard links, it &lt;em&gt;will&lt;/em&gt; have some awareness of fscrypt, and we could just implement full support for looking up the digest name directly as fscrypt does?  One main issue would be that since the digest name is truncated, it may hash to a different MDT in a striped directory than the full name, so either we still need to include the FID, or fix the hash function to only use the first N bytes of the name for the hash.  Since there was a new CRUSH directory hash function added in 2.14, it &lt;em&gt;could&lt;/em&gt; still be possible to modify the hash function to limit the name length for the hash to the first 16 bytes so that the full and truncated hash both map to the same MDT?  That would need to be done quickly I think...&lt;/p&gt;</comment>
                            <comment id="279189" author="adilger" created="Wed, 9 Sep 2020 23:29:39 +0000"  >&lt;p&gt;Another option would be for fscrypt files to limit the hard link count and then &lt;em&gt;require&lt;/em&gt; that all the hard links are stored in linkEA?  That would mean a hard link limit somewhere between 128-160 names (in theory up to 238 links could fit into 64KiB).  Currently the linkEA only stores 4KiB of links, so 14 &lt;tt&gt;NAME_MAX=256&lt;/tt&gt; links or 119 16-byte names, but this could be increased for fscrypt directories/inodes if necessary, but at some reduction in performance.  The main performance concern for large &lt;tt&gt;link&lt;/tt&gt; xattrs is that these are read sequentially and written atomically, so any modification would require the whole xattr (up to 64KiB in with this change) to be rewritten entirely.&lt;/p&gt;

&lt;p&gt;How does fscrypt handle the lookup internal to ext4 + htree?  Since the digest name is non-reversible, does it keep a lookup table in memory for mapping the digest-&amp;gt;filename, or does it do linear scan of &lt;b&gt;every&lt;/b&gt; directory entry and compute the digest of each to find the matching filename, or (as proposed above) does htree+fscrypt result in a modified directory hash function that uses the (truncated?) hash of the &lt;b&gt;digest&lt;/b&gt; to find the htree leaf block to store/lookup the cyphertext name?  Using the (truncated) digest of the filename to locate the htree block would definitely minimize the number of directory entries that needed to be encoded/scanned to find the matching name.&lt;/p&gt;</comment>
                            <comment id="279190" author="adilger" created="Wed, 9 Sep 2020 23:44:31 +0000"  >&lt;p&gt;Finally, one other thing to consider is that &lt;em&gt;eventually&lt;/em&gt; we are going to be asked to handle case-insensitive name lookups. It makes sense to prepare for this eventuality and do e.g. &quot;&lt;tt&gt;tolower()&lt;/tt&gt;&quot; on the filename before generating the name digest/hash.  That reduces the randomess of the input slightly, but only affects the digest name and not the actual filename.  We would still have the FID to compare against for disambiguation if needed.&lt;/p&gt;</comment>
                            <comment id="279232" author="sebastien" created="Thu, 10 Sep 2020 14:59:32 +0000"  >&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;Thanks all for your comments!&lt;/p&gt;

&lt;p&gt;Indeed, using the second group of 16 bytes of the cipher text name could do the trick, instead of a hash. So the structure would become:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;struct ll_digest_filename {
	struct lu_fid ldf_fid;
	char ldf_excerpt[0];
};
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Taking the second group instead of the first is interesting because it depends on the full plaintext, if I understand correctly how CBS-CTS encryption mode works. I have to think about what to do with shorter names. If the cipher text name can be shorter than 16 bytes, then I would need to treat differently short and long names, by just base64 encoding the cipher text name when it is small for instance. BTW, fscrypt uses an adapted version of base64 encoding, to not have &apos;/&apos; from the possible output characters.&lt;/p&gt;

&lt;p&gt;By using this struct made of a FID and an excerpt of the cipher text name, I think the risk of collision is reduced because only hard links can have the same FID. And hard links can have the same clear text names only if they are in different directories, but in this case the names are encoded with different key.&lt;/p&gt;

&lt;p&gt;Apart from that, the idea to read the linkEA came from the study of how &apos;rm by fid&apos; is implemented on server side. So I did not consider it could &lt;b&gt;not&lt;/b&gt; contain all links &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/sad.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;br/&gt;
Looking again at functions &lt;tt&gt;mdt_rmfid_one()&lt;/tt&gt; and &lt;tt&gt;mdt_links_read()&lt;/tt&gt;, I cannot see how the case of links stored outside of the linkEA is handled. Could you point me to somewhere in the code where this is done?&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br/&gt;
Sebastien.&lt;/p&gt;</comment>
                            <comment id="279274" author="adilger" created="Thu, 10 Sep 2020 19:09:39 +0000"  >&lt;p&gt;The assumption for &quot;rm-by-FID&quot; is that this is only used for &quot;purge&quot; operations, and if a file with many links does not have all filenames stored in the linkEA, then on the next pass the file will be found under the other filename(s) and removed that way, so 100% accuracy is not required.  Also &quot;rm-by-FID&quot; is meant to unlink &lt;b&gt;all&lt;/b&gt; names of a file for purge, while &quot;&lt;tt&gt;unlink()&lt;/tt&gt;&quot; in an fscrypt directory is definitely &lt;b&gt;not&lt;/b&gt; supposed to do that.&lt;/p&gt;

&lt;p&gt;I think if there was some flag like &quot;lookup by hash&quot; or &quot;lookup by prefix&quot; in the RPC then we could pass the encoded name to the MDS and it could do the searching for the few operations that could not be done directly by FID (&lt;tt&gt;unlink()&lt;/tt&gt; of the directory entry being one of those cases).  In the most common case where the name &lt;b&gt;is&lt;/b&gt; in the &lt;tt&gt;link&lt;/tt&gt; xattr it could find the cyphertext name quickly by only searching for links on the inode (normally only 1), but in the very uncommon case where there are more links than fit into linkea the MDS may need to scan the whole parent directory, compare FIDs for a match, then verify the encoded cyphertext against the encoded name from the client.  That would minimize the overhead to a tiny fraction of files unless someone is storing encrypted hard link trees for a backup.&lt;/p&gt;</comment>
                            <comment id="279348" author="sebastien" created="Fri, 11 Sep 2020 15:37:26 +0000"  >&lt;blockquote&gt;&lt;p&gt;The assumption for &quot;rm-by-FID&quot; is that this is only used for &quot;purge&quot; operations, and if a file with many links does not have all filenames stored in the linkEA, then on the next pass the file will be found under the other filename(s) and removed that way, so 100% accuracy is not required. Also &quot;rm-by-FID&quot; is meant to unlink all names of a file for purge, while &quot;unlink()&quot; in an fscrypt directory is definitely not supposed to do that.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Absolutely, no question about that. This is just that in case of access without the key, lookup and unlink operations are like &apos;by FID&apos; operations, so I was looking for inspiration in this direction.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt; I think if there was some flag like &quot;lookup by hash&quot; or &quot;lookup by prefix&quot; in the RPC then we could pass the encoded name to the MDS and it could do the searching for the few operations that could not be done directly by FID (unlink() of the directory entry being one of those cases). In the most common case where the name is in the link xattr it could find the cyphertext name quickly by only searching for links on the inode (normally only 1), but in the very uncommon case where there are more links than fit into linkea the MDS may need to scan the whole parent directory, compare FIDs for a match, then verify the encoded cyphertext against the encoded name from the client. That would minimize the overhead to a tiny fraction of files unless someone is storing encrypted hard link trees for a backup.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I think scanning the whole parent directory is what ext4 does? By calling &lt;tt&gt;ext4_match()&lt;/tt&gt; from &lt;tt&gt;ext4_search_dir()&lt;/tt&gt;? And &lt;tt&gt;fscrypt_match_name()&lt;/tt&gt; (from &lt;tt&gt;ext4_match()&lt;/tt&gt; ) does the job  of comparing digests. But what is not clear to me is in which cases &lt;tt&gt;ext4_search_dir()&lt;/tt&gt; is called. Maybe not for all lookups?&lt;/p&gt;

&lt;p&gt;How is it possible to know if there are more links outside of linkEA? If it is not, then that would imply scanning the whole parent directory every time. In which case I would tend to prefer to limit the hard link count for encrypted files, so that all the hard links are stored in linkEA.&lt;/p&gt;</comment>
                            <comment id="279461" author="adilger" created="Sun, 13 Sep 2020 03:12:53 +0000"  >&lt;blockquote&gt;
&lt;p&gt;How is it possible to know if there are more links outside of linkEA?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;There are a couple of ways to check this:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;compare the inode &lt;tt&gt;i_nlink&lt;/tt&gt; count with the number of entries in the &lt;tt&gt;link&lt;/tt&gt; xattr&lt;/li&gt;
	&lt;li&gt;the link xattr has the &lt;tt&gt;leh_overflow_time&lt;/tt&gt; field, which is set if a link is created that cannot fit into the xattr&lt;/li&gt;
&lt;/ul&gt;
</comment>
                            <comment id="288577" author="sebastien" created="Mon, 4 Jan 2021 16:16:34 +0000"  >&lt;p&gt;In order to cope with ciphertext names, it was previously considered to switch from &lt;tt&gt;char *&lt;/tt&gt; to &lt;tt&gt;struct lu_name *&lt;/tt&gt; for &lt;tt&gt;struct dt_key *&lt;/tt&gt; parameters everywhere in the OSD layer. The challenge is that ciphertext names are no longer valid file names, and not even well-formed strings, because they are binary data, so their actual size needs to be correctly handled, and carefully passed to the backend fs layer.&lt;/p&gt;

&lt;p&gt;An alternative approach could be to base64 encode ciphertext names on client side, before they are put into requests. But because the underlying fscrypt API supports file names of up to &lt;tt&gt;NAME_MAX&lt;/tt&gt; length, base64 encoded ciphertext names can exceed the &lt;tt&gt;NAME_MAX&lt;/tt&gt; limit, as encoding binary into text does not have a 100% space efficiency (e.g. base64 has 75%). So these base64 encoded ciphertext names will need to be decoded before being passed to the backend file system layer. That should be possible to determine if the names we handle in the OSD layer belong to encrypted files or not thanks to the &lt;tt&gt;LMAI_ENCRYPT&lt;/tt&gt; flag.&lt;/p&gt;</comment>
                            <comment id="299403" author="gerrit" created="Wed, 21 Apr 2021 16:02:29 +0000"  >&lt;p&gt;Sebastien Buisson (sbuisson@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/43386&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43386&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: rework includes for client encryption&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 5f5383f2861858d1c6160f5b621e20ff0fc581bb&lt;/p&gt;</comment>
                            <comment id="299404" author="gerrit" created="Wed, 21 Apr 2021 16:02:29 +0000"  >&lt;p&gt;Sebastien Buisson (sbuisson@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/43394&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43394&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: filename encryption - client symlink support&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 7fe5c1b87e041d22ebebb1652065f49a6ce52511&lt;/p&gt;</comment>
                            <comment id="299405" author="gerrit" created="Wed, 21 Apr 2021 16:02:30 +0000"  >&lt;p&gt;Sebastien Buisson (sbuisson@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/43387&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43387&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: limit hard links to linkEA size for enc files&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: a114b2d21485483b53e28f4c68fe161add1dbf94&lt;/p&gt;</comment>
                            <comment id="299406" author="gerrit" created="Wed, 21 Apr 2021 16:02:31 +0000"  >&lt;p&gt;Sebastien Buisson (sbuisson@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/43388&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43388&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: handle null algo for filename encryption&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 8c89713ee351fc1bd069be83d98ae23ae88188d9&lt;/p&gt;</comment>
                            <comment id="299407" author="gerrit" created="Wed, 21 Apr 2021 16:02:31 +0000"  >&lt;p&gt;Sebastien Buisson (sbuisson@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/43389&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43389&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: filename encryption - server side&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: d82d3a70963872cace32579f8910118323779e9a&lt;/p&gt;</comment>
                            <comment id="299408" author="gerrit" created="Wed, 21 Apr 2021 16:02:32 +0000"  >&lt;p&gt;Sebastien Buisson (sbuisson@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/43390&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43390&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: filename encryption - client side&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 4b482a91cd709cb06b00d84fd83f1edf8871ce00&lt;/p&gt;</comment>
                            <comment id="299409" author="gerrit" created="Wed, 21 Apr 2021 16:02:33 +0000"  >&lt;p&gt;Sebastien Buisson (sbuisson@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/43391&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43391&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: filename encryption - server digest support&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: bc63304dbdc1e4b4c4ff5a85a59144968ada5d98&lt;/p&gt;</comment>
                            <comment id="299410" author="gerrit" created="Wed, 21 Apr 2021 16:02:33 +0000"  >&lt;p&gt;Sebastien Buisson (sbuisson@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/43392&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43392&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: filename encryption - client digest support&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: b59bc34484229bce3dd8baca64cab73f57dde7e3&lt;/p&gt;</comment>
                            <comment id="299411" author="gerrit" created="Wed, 21 Apr 2021 16:02:34 +0000"  >&lt;p&gt;Sebastien Buisson (sbuisson@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/43393&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43393&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: filename encryption - server symlink support&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 24773451e2e3f344edc63b941c645ba7417cb6d1&lt;/p&gt;</comment>
                            <comment id="299412" author="gerrit" created="Wed, 21 Apr 2021 16:02:35 +0000"  >&lt;p&gt;Sebastien Buisson (sbuisson@ddn.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/43395&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43395&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: filename encryption - tests&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 9aa45963eaf8e70de07c1304e10aa170e9a3a6da&lt;/p&gt;</comment>
                            <comment id="299414" author="sebastien" created="Wed, 21 Apr 2021 16:14:01 +0000"  >&lt;p&gt;A series of patches to implement filename encryption has been pushed to Gerrit.&lt;/p&gt;

&lt;p&gt;One difficulty is to support &quot;null&quot; algo for filename encryption, inherited from 2.14. This will not be possible with the in-kernel fscrypt library, so the patches modify the behaviour of configure to build with embedded llcrypt by default, and only build against in-kernel fscrypt if explicitly specified via &lt;tt&gt;--enable-crypto=in-kernel&lt;/tt&gt; configure option.&lt;/p&gt;

&lt;p&gt;The objective is to urge users to convert their encrypted directories made with 2.14, to the new fashion that encrypts filenames. We have identified some limitations on the old encryption fashion, due to the new code, for instance the inability to perform &lt;tt&gt;migrate&lt;/tt&gt;. So the idea would be to &lt;tt&gt;cp&lt;/tt&gt; the content of an old-fashion encrypted directory to a new-fashion encrypted directory (which would automatically encrypt names), and then remove the old one.&lt;/p&gt;

&lt;p&gt;Also note the submitted patches only implement filename encryption for ldiskfs backend for now.&lt;/p&gt;</comment>
                            <comment id="299982" author="sebastien" created="Wed, 28 Apr 2021 15:03:54 +0000"  >&lt;p&gt;For ZFS backend, I have not managed to find a way to store cipher text names yet. So currently, OSD-ZFS passes base64 encoded names (as received from the client) to/from the ZFS backend. This means we are limited to &lt;b&gt;160&lt;/b&gt; characters in clear text names of encrypted files/directories. Indeed, if a Lustre file name is longer than 160 chars, its cipher text representation will use at least 192 bytes (name encryption is done in blocks of 32 bytes), and once base64 encoded, we will get a string longer than &lt;tt&gt;NAME_MAX&lt;/tt&gt; because base64 encoding has a 33% overhead.&lt;/p&gt;

&lt;p&gt;The problem with ZFS is that the primitives used by the OSD-ZFS layer to lookup, add and delete all assume a &lt;tt&gt;char *&lt;/tt&gt;, and internally call &lt;tt&gt;strlen&lt;/tt&gt; on that parameter:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;int zap_lookup(objset_t *os, uint64_t zapobj, const char *name,
    uint64_t integer_size, uint64_t num_integers, void *buf);

int zap_add(objset_t *os, uint64_t zapobj, const char *key,
    int integer_size, uint64_t num_integers,
    const void *val, dmu_tx_t *tx);

int zap_remove(objset_t *os, uint64_t zapobj, const char *name,
    dmu_tx_t *tx);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;So cipher text names cannot be passed to these functions.&lt;/p&gt;

&lt;p&gt;I realized these functions had a &lt;tt&gt;uint64&lt;/tt&gt; alternate form, that could be used to pass binary data in, so I tried to substitue one with the other. Unfortunately, it does not seem to work. To illustrate my attempts, and abstract that from the encryption aspects, I have uploaded patch &lt;a href=&quot;https://review.whamcloud.com/43477&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43477&lt;/a&gt;. With this patch, &lt;tt&gt;osd_dir_lookup&lt;/tt&gt; calls &lt;tt&gt;zap_lookup_uint64&lt;/tt&gt; instead of &lt;tt&gt;osd_zap_lookup&lt;/tt&gt; if Project ID on the object is set to &lt;tt&gt;999&lt;/tt&gt;, and &lt;tt&gt;osd_dir_insert&lt;/tt&gt; calls &lt;tt&gt;zap_add_uint64&lt;/tt&gt; instead of &lt;tt&gt;osd_zap_add&lt;/tt&gt; if Project ID on the parent is set to &lt;tt&gt;999&lt;/tt&gt;. So the workflow to test the use of ZAP uint64 alternatives is something along those lines:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;# mount -t lustre -o user_xattr,flock lnode-vm2@tcp:/testfs /mnt/testfs
# mkdir /mnt/testfs/dir1
# lfs project -p 999 /mnt/testfs/dir1
# touch /mnt/testfs/dir1/fileA  &amp;lt;-- this adds the dir entry with zap_add_uint64
# umount /mnt/testfs
# mount -t lustre -o user_xattr,flock lnode-vm2@tcp:/testfs /mnt/testfs
# stat /mnt/testfs/dir1/fileA     &amp;lt;-- this looks up with zap_lookup_uint64
stat: cannot stat &apos;/mnt/testfs/dir1/fileA&apos;: No such file or directory
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I am not sure if it does not work because the uint64 functions are called inappropriately in the patch, or just because those functions are not meant to be used for regular directory entries.&lt;/p&gt;

&lt;p&gt;Any help from a ZFS expert would be welcome here.&lt;/p&gt;</comment>
                            <comment id="300036" author="adilger" created="Wed, 28 Apr 2021 21:07:01 +0000"  >&lt;p&gt;What about an encoding that is more efficient than base64 that could just avoid &apos;/&apos; and &apos;\0&apos; in the filenames?  ZFS must be able to handle almost everything else for ISO-8859-1, UTF-8 and other encodings.&lt;/p&gt;

&lt;p&gt;There are 16x4-2=126 printable characters in ASCII (excluding &apos;/&apos; and DEL) and 16x12-2=190 printable characters in &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO%2FIEC_8859-1&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;ISO-8859-1&lt;/a&gt;, so making a &quot;base128&quot; from characters 48-111 and 192-255 would be possible (and shouldn&apos;t cause &lt;b&gt;too&lt;/b&gt; much headache if files need to be accessed unencrypted), which would mean only 8/7 = 14% expansion instead of 6/4 = 33%.&lt;/p&gt;</comment>
                            <comment id="300081" author="sebastien" created="Thu, 29 Apr 2021 09:22:14 +0000"  >&lt;p&gt;Absolutely, one possibility to mitigate the problem would be to make use of a more efficient encoding algorithm in the &lt;tt&gt;osd-zfs&lt;/tt&gt; layer. On writes, we would have to base64 decode the names received from the client, and re-encode them with the more effective algorithm and write to the ZFS backend. Conversely, we would decode with the more effective algorithm what is read from the ZFS backend, then base64 encode and send that to the client.&lt;/p&gt;

&lt;p&gt;Or maybe we could use a more efficient algorithm directly from the client. That would save some unnecessary re-encoding.&lt;/p&gt;</comment>
                            <comment id="300213" author="sebastien" created="Fri, 30 Apr 2021 15:40:45 +0000"  >&lt;p&gt;I have reworked the way client and server parts are exchanging encrypted file names. Instead of using a base64 encoding that has a 33% overhead, I am using a custom encoding inspired from the yEnc principles (&lt;a href=&quot;http://www.yenc.org/yenc-draft.1.3.txt&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://www.yenc.org/yenc-draft.1.3.txt&lt;/a&gt;).&lt;br/&gt;
Basically, it just takes care of a few critical characters, namely NULL, LF, CR, /, DEL and =. Those are replaced with &apos;=&apos; followed by the char value + 64. And all other chars are left untouched. Efficiency of this encoding depends on the occurrences of the critical chars, but statistically on binary data it can be much higher than base64.&lt;br/&gt;
For instance, with this encoding, a clear text filename of length &amp;lt;= 224 is almost guaranteed to be accepted with a ZFS backend where we store encrypted filenames in their encoded form. Indeed, a clear text filename of length &amp;lt;= 224 results in a cipher text filename of length 224 maximum (name encryption is done in blocks of 32 bytes). Among those 224 bytes, even if there are up to 31 critical characters, the encoded form will still fit into &lt;tt&gt;NAME_MAX&lt;/tt&gt;.&lt;br/&gt;
However, a clear text filename of length &amp;gt; 224 is almost guaranteed to be refused by the ZFS backend for &lt;tt&gt;ENAMETOOLONG&lt;/tt&gt; reason. This is because such filename results in a cipher text filename of length 256. And the probability to have no critical characters among those 256 bytes is very low. But this cannot be avoided with any encoding algorithm, the only way to support clear text filenames of length &amp;gt; 224 with a ZFS backend would be to have binary names handled directly at the &lt;tt&gt;ZAP&lt;/tt&gt; layer.&lt;/p&gt;</comment>
                            <comment id="300225" author="adilger" created="Fri, 30 Apr 2021 17:26:13 +0000"  >&lt;p&gt;Olaf or Brian, could you please comment on the ZFS filename issue here.  Is there any way to store binary filenames in ZFS?&lt;/p&gt;</comment>
                            <comment id="300286" author="behlendorf" created="Fri, 30 Apr 2021 21:49:17 +0000"  >&lt;p&gt;Thanks for asking, I think I can point you in the right direction.&lt;/p&gt;

&lt;p&gt;It is possible to create a ZAP object which uses a binary key but it takes a little special handling. You&apos;re going to need to use the `zap_lookup_uint64()`, `zap_add_uint64()`, `zap_update_uint64()`, `zap_remove_uint64()` family of functions and create a new ZAP object with these additional flags, `zap_create_flags(os, 0, ZAP_FLAG_HASH64 | ZAP_FLAG_UINT64, ...);`.&#160; For your use case it sounds like you may also want to set `ZAP_FLAG_PRE_HASHED_KEY`.&#160; This will prevent the ZAP from hashing the value again and it&apos;ll just using the leading high bits for the hash value.&lt;/p&gt;

&lt;p&gt;The deduplication functionality in ZFS is implemented using this functionality and 256-bit binary keys.&#160; I&apos;d suggest taking a look at the `ddt_zap.c` sources file and using it a reference.&#160; It should give you a pretty good idea how to use these interfaces.&lt;/p&gt;

&lt;p&gt;However, I&apos;m not sure how the ZPL layer would handle it if you created a binary ZAP like this, added it to the directory structure, then mounted the filesystem through the POSIX layer.&#160; If we&apos;re lucky it might just try and output the binary keys as filenames.&#160; If we need to we can always add some code to ZFS to more gracefully handle this unlikely debug case.&lt;/p&gt;</comment>
                            <comment id="300305" author="adilger" created="Sat, 1 May 2021 07:44:25 +0000"  >&lt;p&gt;Brian, thanks for your response. &lt;/p&gt;

&lt;p&gt;I was wondering exactly the same question about ZPL mounting of such directories. It would definitely be prudent to have the ZPL base64 encode such dirents for display to userspace, as Lustre and ext4 do when accessing encrypted directories without a key.  We&apos;ve definitely had to poke into the directory tree on occasion, so keeping this ability will prove useful at some point again in the future.&lt;/p&gt;

&lt;p&gt;Is there a special object type that we should use for this other than a normal directory type?  That would make it more clear to the ZPL that this is a directory, but that it has a special encoding. I was wondering if there was anything that was done in ZPL to handle foreign character sets (Unicode/UTF-8/etc), but UTF-8 doesn&apos;t ever contain a NUL byte in it, while random encrypted data will. &lt;/p&gt;</comment>
                            <comment id="300306" author="adilger" created="Sat, 1 May 2021 07:58:12 +0000"  >&lt;p&gt;Sebastien, it should be configured to have &lt;tt&gt;statfs()&lt;/tt&gt; return &lt;tt&gt;f_namelen=224&lt;/tt&gt; when run on an encrypted directory, so that this is at least conveyed to applications that check what the maximum filename length is. &lt;/p&gt;</comment>
                            <comment id="300317" author="sebastien" created="Mon, 3 May 2021 05:24:56 +0000"  >&lt;p&gt;Thanks Brian for the hints! I will look in this direction. Compared to what I did as an example in patch &lt;a href=&quot;https://review.whamcloud.com/4347&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/4347&lt;/a&gt;, I think what I was missing are the various flags to have the object properly handle the binary key. I will let you know how it goes.&lt;/p&gt;

&lt;p&gt;Andreas, I gave a look at your suggestion to return a &lt;tt&gt;Namelen&lt;/tt&gt; adapted to the encrypted directory case, but it seems the &lt;tt&gt;osd_statfs&lt;/tt&gt; function only has the OSD device as parameter, so it seems we cannot make a difference depending on the directory on which &lt;tt&gt;statfs&lt;/tt&gt; is called. What I did from userspace is to call &lt;tt&gt;statfs -f /mnt/testfs/myencrypteddir&lt;/tt&gt;, but maybe you had something different in mind?&lt;/p&gt;</comment>
                            <comment id="300514" author="gerrit" created="Wed, 5 May 2021 02:51:07 +0000"  >&lt;p&gt;Oleg Drokin (green@whamcloud.com) merged in patch &lt;a href=&quot;https://review.whamcloud.com/43386/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43386/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: rework includes for client encryption&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: 028281ae195927e97518c573e7be3e326d9e6bd3&lt;/p&gt;</comment>
                            <comment id="301591" author="sebastien" created="Fri, 14 May 2021 15:33:09 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=behlendorf&quot; class=&quot;user-hover&quot; rel=&quot;behlendorf&quot;&gt;behlendorf&lt;/a&gt; it indeed helps to set the &lt;tt&gt;ZAP_FLAG_HASH64&lt;/tt&gt;, &lt;tt&gt;ZAP_FLAG_UINT64&lt;/tt&gt; and &lt;tt&gt;ZAP_FLAG_PRE_HASHED_KEY&lt;/tt&gt; flags on the ZAP object: with these, I am able to insert a new dir entry with &lt;tt&gt;zap_add_uint64&lt;/tt&gt; and lookup with &lt;tt&gt;zap_lookup_uint64&lt;/tt&gt;. Thanks for the tip!&lt;/p&gt;

&lt;p&gt;The problem I am facing now is that it seems the flags mentioned above can only be set at ZAP object creation time (via &lt;tt&gt;zap_create_flags_dnsize&lt;/tt&gt;/&lt;tt&gt;zap_create_flags&lt;/tt&gt;). Unfortunately, with Lustre client encryption, the workflow is to create an empty directory, and then set it as encrypted.&lt;br/&gt;
For instance, if I create a subdirectory inside this encrypted directory, the corresponding ZAP object will have the desired flags set to be able to handle a binary key, because we know we are inside an encrypted directory, and the files in the subdirectory work ok with a binary key. So this case is fine.&lt;br/&gt;
Now, if I create files directly under the encrypted directory, their parent ZAP object does not have the desired flags set to be able to handle a binary key (as this directory was created before being defined as encrypted), so those files cannot work with a binary key.&lt;br/&gt;
Back to the initial requirement of being able to support encrypted file names up to &lt;tt&gt;NAME_MAX&lt;/tt&gt;, that would mean we are able to support these, but only in subdirectories of encrypted directories, and not right under the encrypted directory.&lt;/p&gt;

&lt;p&gt;Is there a way to modify ZAP flags after the ZAP object has been created, or re-create a ZAP object from a previous one with additional flags? Or maybe ZAP objects can be files, and not only directories?&lt;/p&gt;</comment>
                            <comment id="302169" author="adilger" created="Thu, 20 May 2021 21:43:20 +0000"  >&lt;p&gt;Sebastien, one question that came up during discussion today is whether the &lt;tt&gt;user.&amp;#42;&lt;/tt&gt; xattrs are encrypted by fscrypt?&lt;/p&gt;</comment>
                            <comment id="302217" author="sebastien" created="Fri, 21 May 2021 07:12:35 +0000"  >&lt;p&gt;Good question. In fact, fscrypt does not protect the confidentiality of non-filename metadata, e.g.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;file sizes&lt;/li&gt;
	&lt;li&gt;file permissions&lt;/li&gt;
	&lt;li&gt;file timestamps&lt;/li&gt;
	&lt;li&gt;all extended attributes.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                            <comment id="303326" author="gerrit" created="Wed, 2 Jun 2021 17:48:43 +0000"  >&lt;p&gt;Oleg Drokin (green@whamcloud.com) merged in patch &lt;a href=&quot;https://review.whamcloud.com/43387/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43387/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: limit hard links to linkEA size for enc files&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: 2ffb8f5726d27e7c2324a3e833491231fdaa3306&lt;/p&gt;</comment>
                            <comment id="304803" author="sebastien" created="Thu, 17 Jun 2021 15:40:25 +0000"  >&lt;p&gt;Hi &lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=behlendorf&quot; class=&quot;user-hover&quot; rel=&quot;behlendorf&quot;&gt;behlendorf&lt;/a&gt;, do you have any suggestions regarding the ZAP object flags, per my comment above?&lt;/p&gt;

&lt;p&gt;In particular, I am wondering if there is a way to modify ZAP flags after the ZAP object has been created, or re-create a ZAP object from a previous one with additional flags. Or maybe ZAP objects can be files, and not only directories?&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br/&gt;
Sebastien.&lt;/p&gt;</comment>
                            <comment id="304837" author="adilger" created="Thu, 17 Jun 2021 22:48:23 +0000"  >&lt;p&gt;Sebastien, definitely regular files can be ZAP objects.  We do this for the ZFS OI files, for example, as well as some other index files in osd-zfs.  That said, we &lt;b&gt;do&lt;/b&gt; want to maintain the ability to mount/view/modify ZFS OSD filesystems (OST or MDT) via ZPL, so if you need to add a new ZAP type for client-encrypted directory names, then a similar change should be pushed to ZPL to allow it to identify those files as directories, and be able to encode/print the filenames appropriately for userspace when the filesystem is mounted directly.&lt;/p&gt;</comment>
                            <comment id="308585" author="gerrit" created="Tue, 27 Jul 2021 21:37:03 +0000"  >&lt;p&gt;Oleg Drokin (green@whamcloud.com) merged in patch &lt;a href=&quot;https://review.whamcloud.com/43388/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43388/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: handle null algo for filename encryption&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: f18c87cb5362496a4baadaa14265471c992ca06a&lt;/p&gt;</comment>
                            <comment id="312540" author="gerrit" created="Sat, 11 Sep 2021 06:35:06 +0000"  >&lt;p&gt;&quot;Oleg Drokin &amp;lt;green@whamcloud.com&amp;gt;&quot; merged in patch &lt;a href=&quot;https://review.whamcloud.com/43390/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43390/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: filename encryption&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: 4d38566a004f6a636c37ec0c86f053be9b905bd7&lt;/p&gt;</comment>
                            <comment id="312591" author="gerrit" created="Mon, 13 Sep 2021 08:40:11 +0000"  >&lt;p&gt;&quot;Sebastien Buisson &amp;lt;sbuisson@ddn.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/44898&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/44898&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: no name check for Lustre encrypted inodes&lt;br/&gt;
Project: tools/e2fsprogs&lt;br/&gt;
Branch: master-lustre&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 1d808adc6fe4321a732ca763babc58d52f7f0123&lt;/p&gt;</comment>
                            <comment id="313176" author="gerrit" created="Fri, 17 Sep 2021 14:07:11 +0000"  >&lt;p&gt;&quot;Oleg Drokin &amp;lt;green@whamcloud.com&amp;gt;&quot; merged in patch &lt;a href=&quot;https://review.whamcloud.com/43392/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43392/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: filename encryption - digest support&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: ed4a625d88567a2498c3fe32fd340ae7985e6ad0&lt;/p&gt;</comment>
                            <comment id="313591" author="gerrit" created="Wed, 22 Sep 2021 04:14:48 +0000"  >&lt;p&gt;&quot;Oleg Drokin &amp;lt;green@whamcloud.com&amp;gt;&quot; merged in patch &lt;a href=&quot;https://review.whamcloud.com/43394/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/43394/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: filename encryption - symlink support&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: e735298935b64541fc561bd9e978cd7af48c503e&lt;/p&gt;</comment>
                            <comment id="313653" author="pjones" created="Wed, 22 Sep 2021 13:17:46 +0000"  >&lt;p&gt;Landed for 2.15&lt;/p&gt;</comment>
                            <comment id="314216" author="adilger" created="Tue, 28 Sep 2021 21:41:00 +0000"  >&lt;p&gt;Sebastien, I was just wondering what the interoperability is for filesystems that have encrypted filenames, but are accessed by an older client?  Ideally, the older client could access the unencrypted parts of the filesystem normally, and would not &quot;explode&quot; if trying to access the encrypted directory tree (i.e. not LBUG/Oops when accessing a filename with a NUL byte in it).  If there &lt;b&gt;is&lt;/b&gt; such a problem accessing an encrypted directory by an old client, then it makes sense for the 2.15 MDS to return &lt;tt&gt;-ENOKEY&lt;/tt&gt; to clients without the &lt;tt&gt;OBD_CONNECT2_ENCRYPT&lt;/tt&gt; feature when accessing encrypted directories and files.&lt;/p&gt;

&lt;p&gt;Separately, there is a question of what happens in the unusual case of an encrypted directory being accessed by an old MDS after a downgrade, whether by a new or old client?  It looks like there is already an &lt;tt&gt;LMAI_ENCRYPT&lt;/tt&gt; flag being stored on each file, so this should prevent major problems.&lt;/p&gt;</comment>
                            <comment id="314278" author="sebastien" created="Wed, 29 Sep 2021 13:52:38 +0000"  >&lt;p&gt;Regarding access to 2.15 encrypted directories from older clients, I tested with a 2.12 client and a 2.14 client. I tried to list content of a directory for which I know for sure some names have illegal characters (as told so by e2fsck), and the result is the same for both versions:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;# ls -li /testfs/vault
total 0
144115238860527809 -rw-r--r-- 1 root root 0 Sep 28 15:32 ??????U??e?&amp;lt;?g?????n?G???YK$8???
144115238860527803 -rw-r--r-- 1 root root 0 Sep 28 15:32 =o?&quot;????v????R??XM?????????n?=J?,?
144115238860527801 -rw-r--r-- 1 root root 0 Sep 28 15:32 J=M??%????9???Q{?q??,??rp.?hV;8l?
144115238860527804 -rw-r--r-- 1 root root 0 Sep 28 15:32 O?9????=?@??&amp;gt;O???????v??76&amp;lt;V???0&amp;amp;
144115238860527819 -rw-r--r-- 1 root root 0 Sep 29 15:37 \99D????5?N??Y??g_(?F%3(@x=M?1c???r???u??olJ????g?????{dNP??Wh??#?,F5C?(?3J???S;v??5??????&quot;b???zZ????????n?|??I#??1f_9???BY????O!?3?B?4c??1?=o????a?????JV?Iv],???`z%??6?-k%??=M?=}?4????%??Um???????&amp;lt;6??T?~???#????B??b??????:.??A)
144115238860527806 -rw-r--r-- 1 root root 0 Sep 28 15:32 g??_??[??Z??p???;?_=}?.??aM????c0
144115238860527802 -rw-r--r-- 1 root root 0 Sep 28 15:32 ???T?&quot;g??&amp;gt;??{??J???8?;??e???%]?_
144115238860527807 -rw-r--r-- 1 root root 0 Sep 28 15:32 ???????sg??=J?zu????q????????7?#G
144115238860527805 -rw-r--r-- 1 root root 0 Sep 28 15:32 ????????Q???????0=@as?y6?J?[?p???
144115238860527810 -rw-r--r-- 1 root root 0 Sep 28 15:32 ???*1??`????p????PI9?=?&quot;?????????
144115238860527808 -rw-r--r-- 1 root root 0 Sep 28 15:32 ?:????d????z?????a?p???Jh???????
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So it does not blow up the client, but of course it is not possible to browse subdirectories for instance. This is fine, as the purpose of encryption is to limit access to those who do not have the key.&lt;br/&gt;
All encrypted names go through &lt;tt&gt;critical_encode()&lt;/tt&gt; in 2.15 servers before being sent to the clients. As this routine escapes critical characters such as NULL, LF, CR, /, DEL and =, the names read by encryption-unaware clients are not that badly formed.&lt;/p&gt;</comment>
                            <comment id="315001" author="gerrit" created="Fri, 8 Oct 2021 09:00:55 +0000"  >&lt;p&gt;&quot;Sebastien Buisson &amp;lt;sbuisson@ddn.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/45163&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45163&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; llite: encoded ciphertext name longer than NAME_MAX&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 1fa416289e3ae7a9d3bef15a194c2b5fd54dded2&lt;/p&gt;</comment>
                            <comment id="315305" author="gerrit" created="Tue, 12 Oct 2021 15:48:01 +0000"  >&lt;p&gt;&quot;Sebastien Buisson &amp;lt;sbuisson@ddn.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/45211&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45211&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; ldiskfs: set LDISKFS_ENCRYPT_FL on encrypted files&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 946e64754846d5672387323ff482e2379df977e0&lt;/p&gt;</comment>
                            <comment id="315306" author="gerrit" created="Tue, 12 Oct 2021 15:48:21 +0000"  >&lt;p&gt;&quot;Sebastien Buisson &amp;lt;sbuisson@ddn.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/45212&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45212&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: process Lustre enc inodes as normal enc inodes&lt;br/&gt;
Project: tools/e2fsprogs&lt;br/&gt;
Branch: master-lustre&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 2f2ab907b1f0d3a77b69c754aa03c71d580f7fd4&lt;/p&gt;</comment>
                            <comment id="315395" author="gerrit" created="Wed, 13 Oct 2021 09:50:14 +0000"  >&lt;p&gt;&quot;Sebastien Buisson &amp;lt;sbuisson@ddn.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/45221&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45221&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: missing defs in includes for client encryption&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 089ce9b3939c9f6aad257c61987e7b8d18469b22&lt;/p&gt;</comment>
                            <comment id="315956" author="gerrit" created="Tue, 19 Oct 2021 11:09:15 +0000"  >&lt;p&gt;&quot;Sebastien Buisson &amp;lt;sbuisson@ddn.com&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/45289&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45289&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: support encrypted files handling in pfsck mode&lt;br/&gt;
Project: tools/e2fsprogs&lt;br/&gt;
Branch: master-lustre&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: ef01ec0a4ffc6c0de9dfc1377fa3880611b5e664&lt;/p&gt;</comment>
                            <comment id="317286" author="gerrit" created="Wed, 3 Nov 2021 02:38:25 +0000"  >&lt;p&gt;&quot;Oleg Drokin &amp;lt;green@whamcloud.com&amp;gt;&quot; merged in patch &lt;a href=&quot;https://review.whamcloud.com/45221/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45221/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: missing defs in includes for client encryption&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: 79ac7c144539e0d964db329c341ebf30a8472f5c&lt;/p&gt;</comment>
                            <comment id="319714" author="gerrit" created="Tue, 30 Nov 2021 23:39:54 +0000"  >&lt;p&gt;&quot;Andreas Dilger &amp;lt;adilger@whamcloud.com&amp;gt;&quot; merged in patch &lt;a href=&quot;https://review.whamcloud.com/45289/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45289/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: support encrypted files handling in pfsck mode&lt;br/&gt;
Project: tools/e2fsprogs&lt;br/&gt;
Branch: master-lustre&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: d35469d6c41a90ebeca121d3e5ec709cfc967cb8&lt;/p&gt;</comment>
                            <comment id="319715" author="gerrit" created="Tue, 30 Nov 2021 23:39:58 +0000"  >&lt;p&gt;&quot;Andreas Dilger &amp;lt;adilger@whamcloud.com&amp;gt;&quot; merged in patch &lt;a href=&quot;https://review.whamcloud.com/45212/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45212/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: process Lustre enc inodes as normal enc inodes&lt;br/&gt;
Project: tools/e2fsprogs&lt;br/&gt;
Branch: master-lustre&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: 35ce354fa5688625961a62fae8d26f826b015593&lt;/p&gt;</comment>
                            <comment id="321085" author="adilger" created="Fri, 17 Dec 2021 05:40:23 +0000"  >&lt;p&gt;e2fsprogs be included in e2fsprogs-1.46.2.wc4&lt;/p&gt;</comment>
                            <comment id="321292" author="gerrit" created="Tue, 21 Dec 2021 14:39:51 +0000"  >&lt;p&gt;&quot;James Simmons &amp;lt;jsimmons@infradead.org&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/45907&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45907&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: test native fscrypt for Ubunutu 5.4 kernel&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: ef8ff9e8a4c70d8d40aa53219613f38a7d2d351b&lt;/p&gt;</comment>
                            <comment id="321397" author="gerrit" created="Thu, 23 Dec 2021 07:18:31 +0000"  >&lt;p&gt;&quot;Oleg Drokin &amp;lt;green@whamcloud.com&amp;gt;&quot; merged in patch &lt;a href=&quot;https://review.whamcloud.com/45163/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45163/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: fix handling of encrypted file with long name&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: 75414af6bf310244d38284958ecf037d61936726&lt;/p&gt;</comment>
                            <comment id="322981" author="gerrit" created="Tue, 18 Jan 2022 09:09:25 +0000"  >&lt;p&gt;&quot;Oleg Drokin &amp;lt;green@whamcloud.com&amp;gt;&quot; merged in patch &lt;a href=&quot;https://review.whamcloud.com/45211/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/45211/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13717&quot; title=&quot;Client-side encryption - support file name encryption&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13717&quot;&gt;&lt;del&gt;LU-13717&lt;/del&gt;&lt;/a&gt; sec: make client encryption compatible with ext4&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: 4231fab66eab3e984499bf0c6bd4514692a409fa&lt;/p&gt;</comment>
                            <comment id="323029" author="pjones" created="Tue, 18 Jan 2022 15:32:15 +0000"  >&lt;p&gt;Landed for 2.15&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="70704">LU-15928</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="70019">LU-15787</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="70296">LU-15855</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="70621">LU-15911</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="55593">LU-12275</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="64115">LU-14677</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="66186">LU-15027</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="67781">LU-15406</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="67782">LU-15407</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="70111">LU-15810</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="70675">LU-15922</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="70266">LU-15848</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="70026">LU-15827</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="71788">LU-16085</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                            <subtask id="69154">LU-15654</subtask>
                            <subtask id="70036">LU-15790</subtask>
                    </subtasks>
                <customfields>
                                                                                                                                                                <customfield id="customfield_10890" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|i013p3:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>