.. | .. |
---|
69 | 69 | # define RPCDBG_FACILITY RPCDBG_AUTH |
---|
70 | 70 | #endif |
---|
71 | 71 | |
---|
72 | | -DEFINE_SPINLOCK(krb5_seq_lock); |
---|
73 | | - |
---|
74 | 72 | static void * |
---|
75 | 73 | setup_token(struct krb5_ctx *ctx, struct xdr_netobj *token) |
---|
76 | 74 | { |
---|
.. | .. |
---|
133 | 131 | struct xdr_netobj md5cksum = {.len = sizeof(cksumdata), |
---|
134 | 132 | .data = cksumdata}; |
---|
135 | 133 | void *ptr; |
---|
136 | | - s32 now; |
---|
| 134 | + time64_t now; |
---|
137 | 135 | u32 seq_send; |
---|
138 | 136 | u8 *cksumkey; |
---|
139 | 137 | |
---|
140 | 138 | dprintk("RPC: %s\n", __func__); |
---|
141 | 139 | BUG_ON(ctx == NULL); |
---|
142 | 140 | |
---|
143 | | - now = get_seconds(); |
---|
| 141 | + now = ktime_get_real_seconds(); |
---|
144 | 142 | |
---|
145 | 143 | ptr = setup_token(ctx, token); |
---|
146 | 144 | |
---|
.. | .. |
---|
155 | 153 | |
---|
156 | 154 | memcpy(ptr + GSS_KRB5_TOK_HDR_LEN, md5cksum.data, md5cksum.len); |
---|
157 | 155 | |
---|
158 | | - spin_lock(&krb5_seq_lock); |
---|
159 | | - seq_send = ctx->seq_send++; |
---|
160 | | - spin_unlock(&krb5_seq_lock); |
---|
| 156 | + seq_send = atomic_fetch_inc(&ctx->seq_send); |
---|
161 | 157 | |
---|
162 | 158 | if (krb5_make_seq_num(ctx, ctx->seq, ctx->initiate ? 0 : 0xff, |
---|
163 | 159 | seq_send, ptr + GSS_KRB5_TOK_HDR_LEN, ptr + 8)) |
---|
.. | .. |
---|
174 | 170 | struct xdr_netobj cksumobj = { .len = sizeof(cksumdata), |
---|
175 | 171 | .data = cksumdata}; |
---|
176 | 172 | void *krb5_hdr; |
---|
177 | | - s32 now; |
---|
178 | | - u64 seq_send; |
---|
| 173 | + time64_t now; |
---|
179 | 174 | u8 *cksumkey; |
---|
180 | 175 | unsigned int cksum_usage; |
---|
181 | 176 | __be64 seq_send_be64; |
---|
.. | .. |
---|
186 | 181 | |
---|
187 | 182 | /* Set up the sequence number. Now 64-bits in clear |
---|
188 | 183 | * text and w/o direction indicator */ |
---|
189 | | - spin_lock(&krb5_seq_lock); |
---|
190 | | - seq_send = ctx->seq_send64++; |
---|
191 | | - spin_unlock(&krb5_seq_lock); |
---|
192 | | - |
---|
193 | | - seq_send_be64 = cpu_to_be64(seq_send); |
---|
| 184 | + seq_send_be64 = cpu_to_be64(atomic64_fetch_inc(&ctx->seq_send64)); |
---|
194 | 185 | memcpy(krb5_hdr + 8, (char *) &seq_send_be64, 8); |
---|
195 | 186 | |
---|
196 | 187 | if (ctx->initiate) { |
---|
.. | .. |
---|
207 | 198 | |
---|
208 | 199 | memcpy(krb5_hdr + GSS_KRB5_TOK_HDR_LEN, cksumobj.data, cksumobj.len); |
---|
209 | 200 | |
---|
210 | | - now = get_seconds(); |
---|
| 201 | + now = ktime_get_real_seconds(); |
---|
211 | 202 | |
---|
212 | 203 | return (ctx->endtime < now) ? GSS_S_CONTEXT_EXPIRED : GSS_S_COMPLETE; |
---|
213 | 204 | } |
---|
.. | .. |
---|
223 | 214 | BUG(); |
---|
224 | 215 | case ENCTYPE_DES_CBC_RAW: |
---|
225 | 216 | case ENCTYPE_DES3_CBC_RAW: |
---|
226 | | - case ENCTYPE_ARCFOUR_HMAC: |
---|
227 | 217 | return gss_get_mic_v1(ctx, text, token); |
---|
228 | 218 | case ENCTYPE_AES128_CTS_HMAC_SHA1_96: |
---|
229 | 219 | case ENCTYPE_AES256_CTS_HMAC_SHA1_96: |
---|