Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'nfsd-5.0-2' of git://linux-nfs.org/~bfields/linux

Pull more nfsd fixes from Bruce Fields:
"Two small fixes, one for crashes using nfs/krb5 with older enctypes,
one that could prevent clients from reclaiming state after a kernel
upgrade"

* tag 'nfsd-5.0-2' of git://linux-nfs.org/~bfields/linux:
sunrpc: fix 4 more call sites that were using stack memory with a scatterlist
Revert "nfsd4: return default lease period"

+40 -13
+2 -2
fs/nfsd/nfsctl.c
··· 1239 1239 retval = nfsd_idmap_init(net); 1240 1240 if (retval) 1241 1241 goto out_idmap_error; 1242 - nn->nfsd4_lease = 45; /* default lease time */ 1243 - nn->nfsd4_grace = 45; 1242 + nn->nfsd4_lease = 90; /* default lease time */ 1243 + nn->nfsd4_grace = 90; 1244 1244 nn->somebody_reclaimed = false; 1245 1245 nn->clverifier_counter = prandom_u32(); 1246 1246 nn->clientid_counter = prandom_u32();
+38 -11
net/sunrpc/auth_gss/gss_krb5_seqnum.c
··· 44 44 unsigned char *cksum, unsigned char *buf) 45 45 { 46 46 struct crypto_sync_skcipher *cipher; 47 - unsigned char plain[8]; 47 + unsigned char *plain; 48 48 s32 code; 49 49 50 50 dprintk("RPC: %s:\n", __func__); 51 51 cipher = crypto_alloc_sync_skcipher(kctx->gk5e->encrypt_name, 0, 0); 52 52 if (IS_ERR(cipher)) 53 53 return PTR_ERR(cipher); 54 + 55 + plain = kmalloc(8, GFP_NOFS); 56 + if (!plain) 57 + return -ENOMEM; 54 58 55 59 plain[0] = (unsigned char) ((seqnum >> 24) & 0xff); 56 60 plain[1] = (unsigned char) ((seqnum >> 16) & 0xff); ··· 71 67 72 68 code = krb5_encrypt(cipher, cksum, plain, buf, 8); 73 69 out: 70 + kfree(plain); 74 71 crypto_free_sync_skcipher(cipher); 75 72 return code; 76 73 } ··· 82 77 u32 seqnum, 83 78 unsigned char *cksum, unsigned char *buf) 84 79 { 85 - unsigned char plain[8]; 80 + unsigned char *plain; 81 + s32 code; 86 82 87 83 if (kctx->enctype == ENCTYPE_ARCFOUR_HMAC) 88 84 return krb5_make_rc4_seq_num(kctx, direction, seqnum, 89 85 cksum, buf); 86 + 87 + plain = kmalloc(8, GFP_NOFS); 88 + if (!plain) 89 + return -ENOMEM; 90 90 91 91 plain[0] = (unsigned char) (seqnum & 0xff); 92 92 plain[1] = (unsigned char) ((seqnum >> 8) & 0xff); ··· 103 93 plain[6] = direction; 104 94 plain[7] = direction; 105 95 106 - return krb5_encrypt(key, cksum, plain, buf, 8); 96 + code = krb5_encrypt(key, cksum, plain, buf, 8); 97 + kfree(plain); 98 + return code; 107 99 } 108 100 109 101 static s32 ··· 113 101 unsigned char *buf, int *direction, s32 *seqnum) 114 102 { 115 103 struct crypto_sync_skcipher *cipher; 116 - unsigned char plain[8]; 104 + unsigned char *plain; 117 105 s32 code; 118 106 119 107 dprintk("RPC: %s:\n", __func__); ··· 125 113 if (code) 126 114 goto out; 127 115 116 + plain = kmalloc(8, GFP_NOFS); 117 + if (!plain) { 118 + code = -ENOMEM; 119 + goto out; 120 + } 121 + 128 122 code = krb5_decrypt(cipher, cksum, buf, plain, 8); 129 123 if (code) 130 - goto out; 124 + goto out_plain; 131 125 132 126 if ((plain[4] != plain[5]) || (plain[4] != plain[6]) 133 127 || (plain[4] != plain[7])) { 134 128 code = (s32)KG_BAD_SEQ; 135 - goto out; 129 + goto out_plain; 136 130 } 137 131 138 132 *direction = plain[4]; 139 133 140 134 *seqnum = ((plain[0] << 24) | (plain[1] << 16) | 141 135 (plain[2] << 8) | (plain[3])); 136 + out_plain: 137 + kfree(plain); 142 138 out: 143 139 crypto_free_sync_skcipher(cipher); 144 140 return code; ··· 159 139 int *direction, u32 *seqnum) 160 140 { 161 141 s32 code; 162 - unsigned char plain[8]; 142 + unsigned char *plain; 163 143 struct crypto_sync_skcipher *key = kctx->seq; 164 144 165 145 dprintk("RPC: krb5_get_seq_num:\n"); ··· 167 147 if (kctx->enctype == ENCTYPE_ARCFOUR_HMAC) 168 148 return krb5_get_rc4_seq_num(kctx, cksum, buf, 169 149 direction, seqnum); 150 + plain = kmalloc(8, GFP_NOFS); 151 + if (!plain) 152 + return -ENOMEM; 170 153 171 154 if ((code = krb5_decrypt(key, cksum, buf, plain, 8))) 172 - return code; 155 + goto out; 173 156 174 157 if ((plain[4] != plain[5]) || (plain[4] != plain[6]) || 175 - (plain[4] != plain[7])) 176 - return (s32)KG_BAD_SEQ; 158 + (plain[4] != plain[7])) { 159 + code = (s32)KG_BAD_SEQ; 160 + goto out; 161 + } 177 162 178 163 *direction = plain[4]; 179 164 180 165 *seqnum = ((plain[0]) | 181 166 (plain[1] << 8) | (plain[2] << 16) | (plain[3] << 24)); 182 167 183 - return 0; 168 + out: 169 + kfree(plain); 170 + return code; 184 171 }