Message ID | 3c174edb80d2d37af6b08c637b09268f675e5371.1614275314.git.christophe.leroy@csgroup.eu (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | powerpc: Cleanup of uaccess.h | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch powerpc/merge (626a6c3d2e20da80aaa710104f34ea6037b28b33) |
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch powerpc/next (6895c5ba7bdcc55eacad03cf309ab23be63b9cac) |
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch linus/master (92bf22614b21a2706f4993b278017e437f7785b3) |
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch powerpc/fixes (24321ac668e452a4942598533d267805f291fdc9) |
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch linux-next (1e0d27fce010b0a4a9e595506b6ede75934c31be) |
snowpatch_ozlabs/apply_patch | fail | Failed to apply to any branch |
Hi Christophe, I love your patch! Perhaps something to improve: [auto build test WARNING on powerpc/next] [also build test WARNING on v5.12-rc2 next-20210305] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Christophe-Leroy/powerpc-Cleanup-of-uaccess-h/20210226-015715 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next config: powerpc-randconfig-s031-20210307 (attached as .config) compiler: powerpc-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.3-245-gacc5c298-dirty # https://github.com/0day-ci/linux/commit/449bdbf978936e67e4919be8be0eec3e490a65e2 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Christophe-Leroy/powerpc-Cleanup-of-uaccess-h/20210226-015715 git checkout 449bdbf978936e67e4919be8be0eec3e490a65e2 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=powerpc If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> "sparse warnings: (new ones prefixed by >>)" >> drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected char [noderef] __user *_pu_addr @@ got char *buf @@ drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: expected char [noderef] __user *_pu_addr drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: got char *buf >> drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected char const [noderef] __user *_gu_addr @@ got char const *buf @@ drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: expected char const [noderef] __user *_gu_addr drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: got char const *buf -- drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: cast removes address space '__user' of expression drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: cast removes address space '__user' of expression >> drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int [noderef] __user *_pu_addr @@ got unsigned int [usertype] * @@ drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: expected unsigned int [noderef] __user *_pu_addr drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: got unsigned int [usertype] * drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: cast removes address space '__user' of expression vim +342 drivers/w1/slaves/w1_ds28e04.c fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 338 fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 339 static ssize_t crccheck_show(struct device *dev, struct device_attribute *attr, fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 340 char *buf) fbf7f7b4e2ae40 Markus Franke 2012-05-26 341 { fbf7f7b4e2ae40 Markus Franke 2012-05-26 @342 if (put_user(w1_enable_crccheck + 0x30, buf)) fbf7f7b4e2ae40 Markus Franke 2012-05-26 343 return -EFAULT; fbf7f7b4e2ae40 Markus Franke 2012-05-26 344 fbf7f7b4e2ae40 Markus Franke 2012-05-26 345 return sizeof(w1_enable_crccheck); fbf7f7b4e2ae40 Markus Franke 2012-05-26 346 } fbf7f7b4e2ae40 Markus Franke 2012-05-26 347 fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 348 static ssize_t crccheck_store(struct device *dev, struct device_attribute *attr, fbf7f7b4e2ae40 Markus Franke 2012-05-26 349 const char *buf, size_t count) fbf7f7b4e2ae40 Markus Franke 2012-05-26 350 { fbf7f7b4e2ae40 Markus Franke 2012-05-26 351 char val; fbf7f7b4e2ae40 Markus Franke 2012-05-26 352 fbf7f7b4e2ae40 Markus Franke 2012-05-26 353 if (count != 1 || !buf) fbf7f7b4e2ae40 Markus Franke 2012-05-26 354 return -EINVAL; fbf7f7b4e2ae40 Markus Franke 2012-05-26 355 fbf7f7b4e2ae40 Markus Franke 2012-05-26 @356 if (get_user(val, buf)) fbf7f7b4e2ae40 Markus Franke 2012-05-26 357 return -EFAULT; fbf7f7b4e2ae40 Markus Franke 2012-05-26 358 fbf7f7b4e2ae40 Markus Franke 2012-05-26 359 /* convert to decimal */ fbf7f7b4e2ae40 Markus Franke 2012-05-26 360 val = val - 0x30; fbf7f7b4e2ae40 Markus Franke 2012-05-26 361 if (val != 0 && val != 1) fbf7f7b4e2ae40 Markus Franke 2012-05-26 362 return -EINVAL; fbf7f7b4e2ae40 Markus Franke 2012-05-26 363 fbf7f7b4e2ae40 Markus Franke 2012-05-26 364 /* set the new value */ fbf7f7b4e2ae40 Markus Franke 2012-05-26 365 w1_enable_crccheck = val; fbf7f7b4e2ae40 Markus Franke 2012-05-26 366 fbf7f7b4e2ae40 Markus Franke 2012-05-26 367 return sizeof(w1_enable_crccheck); fbf7f7b4e2ae40 Markus Franke 2012-05-26 368 } fbf7f7b4e2ae40 Markus Franke 2012-05-26 369 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
+Evgeniy for W1 Dallas +Alex & Christian for RADEON Le 07/03/2021 à 11:23, kernel test robot a écrit : > Hi Christophe, > > I love your patch! Perhaps something to improve: > > [auto build test WARNING on powerpc/next] > [also build test WARNING on v5.12-rc2 next-20210305] > [If your patch is applied to the wrong git tree, kindly drop us a note. > And when submitting patch, we suggest to use '--base' as documented in > https://git-scm.com/docs/git-format-patch] > > url: https://github.com/0day-ci/linux/commits/Christophe-Leroy/powerpc-Cleanup-of-uaccess-h/20210226-015715 > base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next > config: powerpc-randconfig-s031-20210307 (attached as .config) > compiler: powerpc-linux-gcc (GCC) 9.3.0 > reproduce: > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross > chmod +x ~/bin/make.cross > # apt-get install sparse > # sparse version: v0.6.3-245-gacc5c298-dirty > # https://github.com/0day-ci/linux/commit/449bdbf978936e67e4919be8be0eec3e490a65e2 > git remote add linux-review https://github.com/0day-ci/linux > git fetch --no-tags linux-review Christophe-Leroy/powerpc-Cleanup-of-uaccess-h/20210226-015715 > git checkout 449bdbf978936e67e4919be8be0eec3e490a65e2 > # save the attached .config to linux build tree > COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=powerpc > > If you fix the issue, kindly add following tag as appropriate > Reported-by: kernel test robot <lkp@intel.com> The mentioned patch is not the source of the problem, it only allows to spot it. Christophe > > > "sparse warnings: (new ones prefixed by >>)" >>> drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected char [noderef] __user *_pu_addr @@ got char *buf @@ > drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: expected char [noderef] __user *_pu_addr > drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: got char *buf >>> drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected char const [noderef] __user *_gu_addr @@ got char const *buf @@ > drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: expected char const [noderef] __user *_gu_addr > drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: got char const *buf > -- > drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: cast removes address space '__user' of expression > drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: cast removes address space '__user' of expression >>> drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned int [noderef] __user *_pu_addr @@ got unsigned int [usertype] * @@ > drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: expected unsigned int [noderef] __user *_pu_addr > drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: got unsigned int [usertype] * > drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: cast removes address space '__user' of expression > > vim +342 drivers/w1/slaves/w1_ds28e04.c > > fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 338 > fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 339 static ssize_t crccheck_show(struct device *dev, struct device_attribute *attr, > fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 340 char *buf) > fbf7f7b4e2ae40 Markus Franke 2012-05-26 341 { > fbf7f7b4e2ae40 Markus Franke 2012-05-26 @342 if (put_user(w1_enable_crccheck + 0x30, buf)) > fbf7f7b4e2ae40 Markus Franke 2012-05-26 343 return -EFAULT; > fbf7f7b4e2ae40 Markus Franke 2012-05-26 344 > fbf7f7b4e2ae40 Markus Franke 2012-05-26 345 return sizeof(w1_enable_crccheck); > fbf7f7b4e2ae40 Markus Franke 2012-05-26 346 } > fbf7f7b4e2ae40 Markus Franke 2012-05-26 347 > fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 348 static ssize_t crccheck_store(struct device *dev, struct device_attribute *attr, > fbf7f7b4e2ae40 Markus Franke 2012-05-26 349 const char *buf, size_t count) > fbf7f7b4e2ae40 Markus Franke 2012-05-26 350 { > fbf7f7b4e2ae40 Markus Franke 2012-05-26 351 char val; > fbf7f7b4e2ae40 Markus Franke 2012-05-26 352 > fbf7f7b4e2ae40 Markus Franke 2012-05-26 353 if (count != 1 || !buf) > fbf7f7b4e2ae40 Markus Franke 2012-05-26 354 return -EINVAL; > fbf7f7b4e2ae40 Markus Franke 2012-05-26 355 > fbf7f7b4e2ae40 Markus Franke 2012-05-26 @356 if (get_user(val, buf)) > fbf7f7b4e2ae40 Markus Franke 2012-05-26 357 return -EFAULT; > fbf7f7b4e2ae40 Markus Franke 2012-05-26 358 > fbf7f7b4e2ae40 Markus Franke 2012-05-26 359 /* convert to decimal */ > fbf7f7b4e2ae40 Markus Franke 2012-05-26 360 val = val - 0x30; > fbf7f7b4e2ae40 Markus Franke 2012-05-26 361 if (val != 0 && val != 1) > fbf7f7b4e2ae40 Markus Franke 2012-05-26 362 return -EINVAL; > fbf7f7b4e2ae40 Markus Franke 2012-05-26 363 > fbf7f7b4e2ae40 Markus Franke 2012-05-26 364 /* set the new value */ > fbf7f7b4e2ae40 Markus Franke 2012-05-26 365 w1_enable_crccheck = val; > fbf7f7b4e2ae40 Markus Franke 2012-05-26 366 > fbf7f7b4e2ae40 Markus Franke 2012-05-26 367 return sizeof(w1_enable_crccheck); > fbf7f7b4e2ae40 Markus Franke 2012-05-26 368 } > fbf7f7b4e2ae40 Markus Franke 2012-05-26 369 > > --- > 0-DAY CI Kernel Test Service, Intel Corporation > https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org >
The radeon warning is trivial to fix, going to send out a patch in a few moments. Regards, Christian. Am 08.03.21 um 13:14 schrieb Christophe Leroy: > +Evgeniy for W1 Dallas > +Alex & Christian for RADEON > > Le 07/03/2021 à 11:23, kernel test robot a écrit : >> Hi Christophe, >> >> I love your patch! Perhaps something to improve: >> >> [auto build test WARNING on powerpc/next] >> [also build test WARNING on v5.12-rc2 next-20210305] >> [If your patch is applied to the wrong git tree, kindly drop us a note. >> And when submitting patch, we suggest to use '--base' as documented in >> https://git-scm.com/docs/git-format-patch] >> >> url: >> https://github.com/0day-ci/linux/commits/Christophe-Leroy/powerpc-Cleanup-of-uaccess-h/20210226-015715 >> base: >> https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next >> config: powerpc-randconfig-s031-20210307 (attached as .config) >> compiler: powerpc-linux-gcc (GCC) 9.3.0 >> reproduce: >> wget >> https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross >> -O ~/bin/make.cross >> chmod +x ~/bin/make.cross >> # apt-get install sparse >> # sparse version: v0.6.3-245-gacc5c298-dirty >> # >> https://github.com/0day-ci/linux/commit/449bdbf978936e67e4919be8be0eec3e490a65e2 >> git remote add linux-review https://github.com/0day-ci/linux >> git fetch --no-tags linux-review >> Christophe-Leroy/powerpc-Cleanup-of-uaccess-h/20210226-015715 >> git checkout 449bdbf978936e67e4919be8be0eec3e490a65e2 >> # save the attached .config to linux build tree >> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 >> make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=powerpc >> >> If you fix the issue, kindly add following tag as appropriate >> Reported-by: kernel test robot <lkp@intel.com> > > > The mentioned patch is not the source of the problem, it only allows > to spot it. > > Christophe > >> >> >> "sparse warnings: (new ones prefixed by >>)" >>>> drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: sparse: incorrect >>>> type in initializer (different address spaces) @@ expected char >>>> [noderef] __user *_pu_addr @@ got char *buf @@ >> drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: expected char >> [noderef] __user *_pu_addr >> drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: got char *buf >>>> drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: sparse: incorrect >>>> type in initializer (different address spaces) @@ expected char >>>> const [noderef] __user *_gu_addr @@ got char const *buf @@ >> drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: expected char >> const [noderef] __user *_gu_addr >> drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: got char const >> *buf >> -- >> drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: cast >> removes address space '__user' of expression >> drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: cast >> removes address space '__user' of expression >>>> drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: >>>> incorrect type in initializer (different address spaces) @@ >>>> expected unsigned int [noderef] __user *_pu_addr @@ got >>>> unsigned int [usertype] * @@ >> drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: expected >> unsigned int [noderef] __user *_pu_addr >> drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: got >> unsigned int [usertype] * >> drivers/gpu/drm/radeon/radeon_ttm.c:933:21: sparse: sparse: cast >> removes address space '__user' of expression >> >> vim +342 drivers/w1/slaves/w1_ds28e04.c >> >> fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 338 >> fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 339 static ssize_t >> crccheck_show(struct device *dev, struct device_attribute *attr, >> fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 340 >> char *buf) >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 341 { >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 @342 if >> (put_user(w1_enable_crccheck + 0x30, buf)) >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 343 return -EFAULT; >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 344 >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 345 return >> sizeof(w1_enable_crccheck); >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 346 } >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 347 >> fa33a65a9cf7e2 Greg Kroah-Hartman 2013-08-21 348 static ssize_t >> crccheck_store(struct device *dev, struct device_attribute *attr, >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 349 >> const char *buf, size_t count) >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 350 { >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 351 char val; >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 352 >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 353 if (count != 1 >> || !buf) >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 354 return -EINVAL; >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 355 >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 @356 if >> (get_user(val, buf)) >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 357 return -EFAULT; >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 358 >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 359 /* convert to >> decimal */ >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 360 val = val - 0x30; >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 361 if (val != 0 >> && val != 1) >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 362 return -EINVAL; >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 363 >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 364 /* set the new >> value */ >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 365 w1_enable_crccheck >> = val; >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 366 >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 367 return >> sizeof(w1_enable_crccheck); >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 368 } >> fbf7f7b4e2ae40 Markus Franke 2012-05-26 369 >> >> --- >> 0-DAY CI Kernel Test Service, Intel Corporation >> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org >> > _______________________________________________ > amd-gfx mailing list > amd-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx
diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h index 616a3a7928c2..671c083f2f2f 100644 --- a/arch/powerpc/include/asm/uaccess.h +++ b/arch/powerpc/include/asm/uaccess.h @@ -43,21 +43,6 @@ static inline bool __access_ok(unsigned long addr, unsigned long size) * exception handling means that it's no longer "just"...) * */ -#define __put_user_size(x, ptr, size, retval) \ -do { \ - __label__ __pu_failed; \ - \ - retval = 0; \ - allow_write_to_user(ptr, size); \ - __put_user_size_goto(x, ptr, size, __pu_failed); \ - prevent_write_to_user(ptr, size); \ - break; \ - \ -__pu_failed: \ - retval = -EFAULT; \ - prevent_write_to_user(ptr, size); \ -} while (0) - #define __put_user(x, ptr) \ ({ \ long __pu_err; \ @@ -66,23 +51,29 @@ __pu_failed: \ __typeof__(sizeof(*(ptr))) __pu_size = sizeof(*(ptr)); \ \ might_fault(); \ - __put_user_size(__pu_val, __pu_addr, __pu_size, __pu_err); \ + do { \ + __label__ __pu_failed; \ + \ + allow_write_to_user(__pu_addr, __pu_size); \ + __put_user_size_goto(__pu_val, __pu_addr, __pu_size, __pu_failed); \ + prevent_write_to_user(__pu_addr, __pu_size); \ + __pu_err = 0; \ + break; \ + \ +__pu_failed: \ + prevent_write_to_user(__pu_addr, __pu_size); \ + __pu_err = -EFAULT; \ + } while (0); \ \ __pu_err; \ }) #define put_user(x, ptr) \ ({ \ - long __pu_err = -EFAULT; \ - __typeof__(*(ptr)) __user *__pu_addr = (ptr); \ - __typeof__(*(ptr)) __pu_val = (__typeof__(*(ptr)))(x); \ - __typeof__(sizeof(*(ptr))) __pu_size = sizeof(*(ptr)); \ + __typeof__(*(ptr)) __user *_pu_addr = (ptr); \ \ - might_fault(); \ - if (access_ok(__pu_addr, __pu_size)) \ - __put_user_size(__pu_val, __pu_addr, __pu_size, __pu_err); \ - \ - __pu_err; \ + access_ok(_pu_addr, sizeof(*(ptr))) ? \ + __put_user(x, _pu_addr) : -EFAULT; \ }) /* @@ -192,13 +183,6 @@ do { \ } \ } while (0) -#define __get_user_size(x, ptr, size, retval) \ -do { \ - allow_read_from_user(ptr, size); \ - __get_user_size_allowed(x, ptr, size, retval); \ - prevent_read_from_user(ptr, size); \ -} while (0) - /* * This is a type: either unsigned long, if the argument fits into * that type, or otherwise unsigned long long. @@ -214,7 +198,9 @@ do { \ __typeof__(sizeof(*(ptr))) __gu_size = sizeof(*(ptr)); \ \ might_fault(); \ - __get_user_size(__gu_val, __gu_addr, __gu_size, __gu_err); \ + allow_read_from_user(__gu_addr, __gu_size); \ + __get_user_size_allowed(__gu_val, __gu_addr, __gu_size, __gu_err); \ + prevent_read_from_user(__gu_addr, __gu_size); \ (x) = (__typeof__(*(ptr)))__gu_val; \ \ __gu_err; \ @@ -222,17 +208,11 @@ do { \ #define get_user(x, ptr) \ ({ \ - long __gu_err = -EFAULT; \ - __long_type(*(ptr)) __gu_val = 0; \ - __typeof__(*(ptr)) __user *__gu_addr = (ptr); \ - __typeof__(sizeof(*(ptr))) __gu_size = sizeof(*(ptr)); \ - \ - might_fault(); \ - if (access_ok(__gu_addr, __gu_size)) \ - __get_user_size(__gu_val, __gu_addr, __gu_size, __gu_err); \ - (x) = (__force __typeof__(*(ptr)))__gu_val; \ + __typeof__(*(ptr)) __user *_gu_addr = (ptr); \ \ - __gu_err; \ + access_ok(_gu_addr, sizeof(*(ptr))) ? \ + __get_user(x, _gu_addr) : \ + ((x) = (__force __typeof__(*(ptr)))0, -EFAULT); \ }) /* more complex routines */
Make get_user() do the access_ok() check then call __get_user(). Make put_user() do the access_ok() check then call __put_user(). Then embed __get_user_size() and __put_user_size() in __get_user() and __put_user(). Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> --- arch/powerpc/include/asm/uaccess.h | 66 +++++++++++------------------- 1 file changed, 23 insertions(+), 43 deletions(-)