hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/arch/nds32/mm/alignment.c
....@@ -289,13 +289,13 @@
289289 unaligned_addr += shift;
290290
291291 if (load) {
292
- if (!access_ok(VERIFY_READ, (void *)unaligned_addr, len))
292
+ if (!access_ok((void *)unaligned_addr, len))
293293 return -EACCES;
294294
295295 get_data(unaligned_addr, &target_val, len);
296296 *idx_to_addr(regs, target_idx) = target_val;
297297 } else {
298
- if (!access_ok(VERIFY_WRITE, (void *)unaligned_addr, len))
298
+ if (!access_ok((void *)unaligned_addr, len))
299299 return -EACCES;
300300 target_val = *idx_to_addr(regs, target_idx);
301301 set_data((void *)unaligned_addr, target_val, len);
....@@ -479,7 +479,7 @@
479479
480480 if (load) {
481481
482
- if (!access_ok(VERIFY_READ, (void *)unaligned_addr, len))
482
+ if (!access_ok((void *)unaligned_addr, len))
483483 return -EACCES;
484484
485485 get_data(unaligned_addr, &target_val, len);
....@@ -491,7 +491,7 @@
491491 *idx_to_addr(regs, RT(inst)) = target_val;
492492 } else {
493493
494
- if (!access_ok(VERIFY_WRITE, (void *)unaligned_addr, len))
494
+ if (!access_ok((void *)unaligned_addr, len))
495495 return -EACCES;
496496
497497 target_val = *idx_to_addr(regs, RT(inst));
....@@ -512,7 +512,7 @@
512512 {
513513 unsigned long inst;
514514 int ret = -EFAULT;
515
- mm_segment_t seg = get_fs();
515
+ mm_segment_t seg;
516516
517517 inst = get_inst(regs->ipc);
518518
....@@ -520,13 +520,12 @@
520520 "Faulting addr: 0x%08lx, pc: 0x%08lx [inst: 0x%08lx ]\n", addr,
521521 regs->ipc, inst);
522522
523
- set_fs(USER_DS);
524
-
523
+ seg = force_uaccess_begin();
525524 if (inst & NDS32_16BIT_INSTRUCTION)
526525 ret = do_16((inst >> 16) & 0xffff, regs);
527526 else
528527 ret = do_32(inst, regs);
529
- set_fs(seg);
528
+ force_uaccess_end(seg);
530529
531530 return ret;
532531 }