CC: [email protected] BCC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: zhanglin <[email protected]> TO: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: zhanglin <[email protected]>
Hi zhanglin, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on linux/master] [also build test WARNING on akpm-mm/mm-everything linus/master v5.18-rc6] [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/intel-lab-lkp/linux/commits/zhanglin/fs-proc-add-mask_secrets-to-prevent-sensitive-information-leakage/20220509-140823 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git c5eb0a61238dd6faf37f58c9ce61c9980aaffd7a :::::: branch date: 3 days ago :::::: commit date: 3 days ago config: h8300-randconfig-s031-20220512 (https://download.01.org/0day-ci/archive/20220512/[email protected]/config) compiler: h8300-linux-gcc (GCC) 11.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.4-dirty # https://github.com/intel-lab-lkp/linux/commit/f8d1c429178d1ee0c447ee68f4e7b602c5df911f git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review zhanglin/fs-proc-add-mask_secrets-to-prevent-sensitive-information-leakage/20220509-140823 git checkout f8d1c429178d1ee0c447ee68f4e7b602c5df911f # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=h8300 SHELL=/bin/bash fs/proc/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> sparse warnings: (new ones prefixed by >>) >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:417:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:417:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:417:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:417:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:417:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:417:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:417:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:417:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:417:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:417:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:469:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:469:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:469:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:469:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:469:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:469:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:469:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:469:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:469:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:469:9: sparse: sparse: cast removes address space '__rcu' of expression >> fs/proc/mask_secrets.c:26:57: sparse: sparse: incorrect type in initializer >> (different address spaces) @@ expected int [noderef] __rcu *static >> [toplevel] mask_secrets_enabled @@ got int * @@ fs/proc/mask_secrets.c:26:57: sparse: expected int [noderef] __rcu *static [toplevel] mask_secrets_enabled fs/proc/mask_secrets.c:26:57: sparse: got int * >> fs/proc/mask_secrets.c:56:29: sparse: sparse: Using plain integer as NULL >> pointer fs/proc/mask_secrets.c:57:31: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:58:22: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:59:26: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:62:32: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:63:30: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:64:44: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:65:25: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:67:23: sparse: sparse: Using plain integer as NULL pointer >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression >> fs/proc/mask_secrets.c:112:9: sparse: sparse: cast removes address space >> '__rcu' of expression fs/proc/mask_secrets.c:271:44: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:282:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:305:44: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:308:24: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:314:9: sparse: sparse: cast removes address space '__rcu' of expression fs/proc/mask_secrets.c:339:32: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:343:47: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:359:44: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:360:26: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:361:31: sparse: sparse: Using plain integer as NULL pointer fs/proc/mask_secrets.c:362:24: sparse: sparse: too many warnings vim +/__rcu +112 fs/proc/mask_secrets.c f8d1c429178d1e zhanglin 2022-05-09 21 f8d1c429178d1e zhanglin 2022-05-09 22 static const char *SECRET_SEPARATOR = ":"; f8d1c429178d1e zhanglin 2022-05-09 23 static const int MASK_SECRETS_ENABLED = 1; f8d1c429178d1e zhanglin 2022-05-09 24 static const int MASK_SECRETS_DISABLED; f8d1c429178d1e zhanglin 2022-05-09 25 static DEFINE_SPINLOCK(mask_secrets_enabled_spinlock); f8d1c429178d1e zhanglin 2022-05-09 @26 static int __rcu *mask_secrets_enabled __read_mostly = (int *)&MASK_SECRETS_DISABLED; f8d1c429178d1e zhanglin 2022-05-09 27 static DEFINE_SPINLOCK(cmdline_hashtab_spinlock); f8d1c429178d1e zhanglin 2022-05-09 28 static struct hlist_head __rcu cmdline_hashtab[CMDLINE_HASHTABSIZE] __read_mostly = { f8d1c429178d1e zhanglin 2022-05-09 29 [0 ... (CMDLINE_HASHTABSIZE-1)] = HLIST_HEAD_INIT }; f8d1c429178d1e zhanglin 2022-05-09 30 static struct kmem_cache *cmdline_hashtab_item_cachep; f8d1c429178d1e zhanglin 2022-05-09 31 f8d1c429178d1e zhanglin 2022-05-09 32 struct cmdline_hashtab_item { f8d1c429178d1e zhanglin 2022-05-09 33 struct hlist_node hlist; f8d1c429178d1e zhanglin 2022-05-09 34 char *cmdline; f8d1c429178d1e zhanglin 2022-05-09 35 char *progname; f8d1c429178d1e zhanglin 2022-05-09 36 char *secrets; f8d1c429178d1e zhanglin 2022-05-09 37 }; f8d1c429178d1e zhanglin 2022-05-09 38 f8d1c429178d1e zhanglin 2022-05-09 39 static int is_mask_secrets_enabled(void) f8d1c429178d1e zhanglin 2022-05-09 40 { f8d1c429178d1e zhanglin 2022-05-09 41 int ret = 0; f8d1c429178d1e zhanglin 2022-05-09 42 f8d1c429178d1e zhanglin 2022-05-09 43 rcu_read_lock(); f8d1c429178d1e zhanglin 2022-05-09 44 ret = *(rcu_dereference(mask_secrets_enabled)); f8d1c429178d1e zhanglin 2022-05-09 45 rcu_read_unlock(); f8d1c429178d1e zhanglin 2022-05-09 46 return ret; f8d1c429178d1e zhanglin 2022-05-09 47 } f8d1c429178d1e zhanglin 2022-05-09 48 f8d1c429178d1e zhanglin 2022-05-09 49 size_t mask_secrets(struct mm_struct *mm, char __user *buf, f8d1c429178d1e zhanglin 2022-05-09 50 size_t count, loff_t pos) f8d1c429178d1e zhanglin 2022-05-09 51 { f8d1c429178d1e zhanglin 2022-05-09 52 unsigned long arg_start = 0; f8d1c429178d1e zhanglin 2022-05-09 53 unsigned long arg_end = 0; f8d1c429178d1e zhanglin 2022-05-09 54 int mask_arg_len = 0; f8d1c429178d1e zhanglin 2022-05-09 55 size_t remote_vm_copied = 0; f8d1c429178d1e zhanglin 2022-05-09 @56 struct file *file = 0; f8d1c429178d1e zhanglin 2022-05-09 57 struct inode *inode = 0; f8d1c429178d1e zhanglin 2022-05-09 58 char *kbuf = 0; f8d1c429178d1e zhanglin 2022-05-09 59 char *progname = 0; f8d1c429178d1e zhanglin 2022-05-09 60 int proghash = -1; f8d1c429178d1e zhanglin 2022-05-09 61 int prog_found = 0; f8d1c429178d1e zhanglin 2022-05-09 62 char *mask_arg_start = 0; f8d1c429178d1e zhanglin 2022-05-09 63 char *mask_arg_end = 0; f8d1c429178d1e zhanglin 2022-05-09 64 struct cmdline_hashtab_item *chi = 0; f8d1c429178d1e zhanglin 2022-05-09 65 char *psecret = 0; f8d1c429178d1e zhanglin 2022-05-09 66 size_t psecret_len = 0; f8d1c429178d1e zhanglin 2022-05-09 67 char *pmask = 0; f8d1c429178d1e zhanglin 2022-05-09 68 size_t pmask_len = 0; f8d1c429178d1e zhanglin 2022-05-09 69 size_t size; f8d1c429178d1e zhanglin 2022-05-09 70 size_t total_copied = 0; f8d1c429178d1e zhanglin 2022-05-09 71 int err = 0; f8d1c429178d1e zhanglin 2022-05-09 72 f8d1c429178d1e zhanglin 2022-05-09 73 if (!is_mask_secrets_enabled()) { f8d1c429178d1e zhanglin 2022-05-09 74 err = -EPERM; f8d1c429178d1e zhanglin 2022-05-09 75 goto exit_err; f8d1c429178d1e zhanglin 2022-05-09 76 } f8d1c429178d1e zhanglin 2022-05-09 77 f8d1c429178d1e zhanglin 2022-05-09 78 spin_lock(&mm->arg_lock); f8d1c429178d1e zhanglin 2022-05-09 79 arg_start = mm->arg_start; f8d1c429178d1e zhanglin 2022-05-09 80 arg_end = mm->arg_end; f8d1c429178d1e zhanglin 2022-05-09 81 spin_unlock(&mm->arg_lock); f8d1c429178d1e zhanglin 2022-05-09 82 if (arg_start >= arg_end) { f8d1c429178d1e zhanglin 2022-05-09 83 err = -ERANGE; f8d1c429178d1e zhanglin 2022-05-09 84 goto exit_err; f8d1c429178d1e zhanglin 2022-05-09 85 } f8d1c429178d1e zhanglin 2022-05-09 86 mask_arg_len = arg_end - arg_start + 1; f8d1c429178d1e zhanglin 2022-05-09 87 f8d1c429178d1e zhanglin 2022-05-09 88 file = get_mm_exe_file(mm); f8d1c429178d1e zhanglin 2022-05-09 89 if (!file) { f8d1c429178d1e zhanglin 2022-05-09 90 err = -ENOENT; f8d1c429178d1e zhanglin 2022-05-09 91 goto exit_err; f8d1c429178d1e zhanglin 2022-05-09 92 } f8d1c429178d1e zhanglin 2022-05-09 93 inode = file_inode(file); f8d1c429178d1e zhanglin 2022-05-09 94 if (!inode) { f8d1c429178d1e zhanglin 2022-05-09 95 err = -ENOENT; f8d1c429178d1e zhanglin 2022-05-09 96 goto exit_err; f8d1c429178d1e zhanglin 2022-05-09 97 } f8d1c429178d1e zhanglin 2022-05-09 98 proghash = cmdline_hash(inode->i_ino); f8d1c429178d1e zhanglin 2022-05-09 99 kbuf = kzalloc(max(PATH_MAX, mask_arg_len), GFP_KERNEL); f8d1c429178d1e zhanglin 2022-05-09 100 if (!kbuf) { f8d1c429178d1e zhanglin 2022-05-09 101 err = -ENOMEM; f8d1c429178d1e zhanglin 2022-05-09 102 goto exit_err; f8d1c429178d1e zhanglin 2022-05-09 103 } f8d1c429178d1e zhanglin 2022-05-09 104 progname = d_path(&file->f_path, kbuf, PATH_MAX); f8d1c429178d1e zhanglin 2022-05-09 105 if (IS_ERR_OR_NULL(progname)) { f8d1c429178d1e zhanglin 2022-05-09 106 err = -ENOENT; f8d1c429178d1e zhanglin 2022-05-09 107 goto cleanup_kbuf; f8d1c429178d1e zhanglin 2022-05-09 108 } f8d1c429178d1e zhanglin 2022-05-09 109 f8d1c429178d1e zhanglin 2022-05-09 110 rcu_read_lock(); f8d1c429178d1e zhanglin 2022-05-09 111 prog_found = 0; f8d1c429178d1e zhanglin 2022-05-09 @112 hash_for_each_possible_rcu(cmdline_hashtab, chi, hlist, proghash) f8d1c429178d1e zhanglin 2022-05-09 113 if (strcmp(chi->progname, progname) == 0) { f8d1c429178d1e zhanglin 2022-05-09 114 prog_found = 1; f8d1c429178d1e zhanglin 2022-05-09 115 break; f8d1c429178d1e zhanglin 2022-05-09 116 } f8d1c429178d1e zhanglin 2022-05-09 117 f8d1c429178d1e zhanglin 2022-05-09 118 if (!prog_found) { f8d1c429178d1e zhanglin 2022-05-09 119 rcu_read_unlock(); f8d1c429178d1e zhanglin 2022-05-09 120 goto cleanup_kbuf; f8d1c429178d1e zhanglin 2022-05-09 121 } f8d1c429178d1e zhanglin 2022-05-09 122 f8d1c429178d1e zhanglin 2022-05-09 123 mask_arg_start = kbuf; f8d1c429178d1e zhanglin 2022-05-09 124 mask_arg_end = mask_arg_start + (arg_end - arg_start); f8d1c429178d1e zhanglin 2022-05-09 125 remote_vm_copied = access_remote_vm(mm, arg_start, mask_arg_start, mask_arg_len, FOLL_ANON); f8d1c429178d1e zhanglin 2022-05-09 126 if (remote_vm_copied <= 0) { f8d1c429178d1e zhanglin 2022-05-09 127 rcu_read_unlock(); f8d1c429178d1e zhanglin 2022-05-09 128 err = -EIO; f8d1c429178d1e zhanglin 2022-05-09 129 goto cleanup_kbuf; f8d1c429178d1e zhanglin 2022-05-09 130 } f8d1c429178d1e zhanglin 2022-05-09 131 /*skip progname */ f8d1c429178d1e zhanglin 2022-05-09 132 for (pmask = mask_arg_start; *pmask && (pmask <= mask_arg_end); pmask++) f8d1c429178d1e zhanglin 2022-05-09 133 ; f8d1c429178d1e zhanglin 2022-05-09 134 f8d1c429178d1e zhanglin 2022-05-09 135 if (!chi->secrets) { f8d1c429178d1e zhanglin 2022-05-09 136 rcu_read_unlock(); f8d1c429178d1e zhanglin 2022-05-09 137 /*mask everything, such as: xxxconnect host port username password.*/ f8d1c429178d1e zhanglin 2022-05-09 138 for (pmask = pmask + 1; (pmask <= mask_arg_end); pmask++) f8d1c429178d1e zhanglin 2022-05-09 139 for (; (pmask <= mask_arg_end) && (*pmask); pmask++) f8d1c429178d1e zhanglin 2022-05-09 140 *pmask = 'Z'; f8d1c429178d1e zhanglin 2022-05-09 141 goto copydata; f8d1c429178d1e zhanglin 2022-05-09 142 } f8d1c429178d1e zhanglin 2022-05-09 143 f8d1c429178d1e zhanglin 2022-05-09 144 for (pmask = pmask + 1; pmask <= mask_arg_end; pmask++) { f8d1c429178d1e zhanglin 2022-05-09 145 psecret = chi->secrets; f8d1c429178d1e zhanglin 2022-05-09 146 while (*psecret) { f8d1c429178d1e zhanglin 2022-05-09 147 psecret_len = strlen(psecret); f8d1c429178d1e zhanglin 2022-05-09 148 if (psecret_len < 2) { f8d1c429178d1e zhanglin 2022-05-09 149 rcu_read_unlock(); f8d1c429178d1e zhanglin 2022-05-09 150 err = -EINVAL; f8d1c429178d1e zhanglin 2022-05-09 151 goto cleanup_kbuf; f8d1c429178d1e zhanglin 2022-05-09 152 } f8d1c429178d1e zhanglin 2022-05-09 153 f8d1c429178d1e zhanglin 2022-05-09 154 if (strcmp(pmask, psecret) == 0) { f8d1c429178d1e zhanglin 2022-05-09 155 pmask += psecret_len + 1; f8d1c429178d1e zhanglin 2022-05-09 156 goto mask_secret; f8d1c429178d1e zhanglin 2022-05-09 157 } f8d1c429178d1e zhanglin 2022-05-09 158 f8d1c429178d1e zhanglin 2022-05-09 159 if (strncmp(pmask, psecret, psecret_len) == 0) { f8d1c429178d1e zhanglin 2022-05-09 160 /*handle case: --password=xxxx */ f8d1c429178d1e zhanglin 2022-05-09 161 if ((psecret[0] == '-') && (psecret[1] == '-')) f8d1c429178d1e zhanglin 2022-05-09 162 if (pmask[psecret_len] == '=') { f8d1c429178d1e zhanglin 2022-05-09 163 pmask += psecret_len + 1; f8d1c429178d1e zhanglin 2022-05-09 164 goto mask_secret; f8d1c429178d1e zhanglin 2022-05-09 165 } f8d1c429178d1e zhanglin 2022-05-09 166 f8d1c429178d1e zhanglin 2022-05-09 167 if (psecret[0] == '-') { f8d1c429178d1e zhanglin 2022-05-09 168 /*handle case: -password=xxxx or -p=xxxx*/ f8d1c429178d1e zhanglin 2022-05-09 169 if (pmask[psecret_len] == '=') { f8d1c429178d1e zhanglin 2022-05-09 170 pmask += psecret_len + 1; f8d1c429178d1e zhanglin 2022-05-09 171 goto mask_secret; f8d1c429178d1e zhanglin 2022-05-09 172 } f8d1c429178d1e zhanglin 2022-05-09 173 f8d1c429178d1e zhanglin 2022-05-09 174 /*handle case: -pxxxx*/ f8d1c429178d1e zhanglin 2022-05-09 175 if (psecret_len == 2) { f8d1c429178d1e zhanglin 2022-05-09 176 pmask += psecret_len; f8d1c429178d1e zhanglin 2022-05-09 177 goto mask_secret; f8d1c429178d1e zhanglin 2022-05-09 178 } f8d1c429178d1e zhanglin 2022-05-09 179 } f8d1c429178d1e zhanglin 2022-05-09 180 } f8d1c429178d1e zhanglin 2022-05-09 181 f8d1c429178d1e zhanglin 2022-05-09 182 if (psecret_len == 2) { f8d1c429178d1e zhanglin 2022-05-09 183 pmask_len = strlen(pmask); f8d1c429178d1e zhanglin 2022-05-09 184 /*handle case: -yp xxxx, such as: useradd -rp xxxx*/ f8d1c429178d1e zhanglin 2022-05-09 185 if ((pmask_len > 2) && (*pmask == '-') f8d1c429178d1e zhanglin 2022-05-09 186 && (pmask[pmask_len - 1] == psecret[1])) { f8d1c429178d1e zhanglin 2022-05-09 187 pmask += pmask_len + 1; f8d1c429178d1e zhanglin 2022-05-09 188 goto mask_secret; f8d1c429178d1e zhanglin 2022-05-09 189 } f8d1c429178d1e zhanglin 2022-05-09 190 } f8d1c429178d1e zhanglin 2022-05-09 191 f8d1c429178d1e zhanglin 2022-05-09 192 psecret += psecret_len + 1; f8d1c429178d1e zhanglin 2022-05-09 193 } f8d1c429178d1e zhanglin 2022-05-09 194 f8d1c429178d1e zhanglin 2022-05-09 195 pmask += strlen(pmask); f8d1c429178d1e zhanglin 2022-05-09 196 continue; f8d1c429178d1e zhanglin 2022-05-09 197 f8d1c429178d1e zhanglin 2022-05-09 198 mask_secret: f8d1c429178d1e zhanglin 2022-05-09 199 for (; (pmask <= mask_arg_end) && (*pmask); pmask++) f8d1c429178d1e zhanglin 2022-05-09 200 *pmask = 'Z'; f8d1c429178d1e zhanglin 2022-05-09 201 } f8d1c429178d1e zhanglin 2022-05-09 202 rcu_read_unlock(); f8d1c429178d1e zhanglin 2022-05-09 203 f8d1c429178d1e zhanglin 2022-05-09 204 copydata: f8d1c429178d1e zhanglin 2022-05-09 205 size = arg_end - pos; f8d1c429178d1e zhanglin 2022-05-09 206 size = min_t(size_t, size, count); f8d1c429178d1e zhanglin 2022-05-09 207 if (copy_to_user(buf, mask_arg_start + pos - arg_start, size)) f8d1c429178d1e zhanglin 2022-05-09 208 goto cleanup_kbuf; f8d1c429178d1e zhanglin 2022-05-09 209 f8d1c429178d1e zhanglin 2022-05-09 210 total_copied = size; f8d1c429178d1e zhanglin 2022-05-09 211 f8d1c429178d1e zhanglin 2022-05-09 212 cleanup_kbuf: f8d1c429178d1e zhanglin 2022-05-09 213 kfree(kbuf); f8d1c429178d1e zhanglin 2022-05-09 214 f8d1c429178d1e zhanglin 2022-05-09 215 exit_err: f8d1c429178d1e zhanglin 2022-05-09 216 return total_copied; f8d1c429178d1e zhanglin 2022-05-09 217 } f8d1c429178d1e zhanglin 2022-05-09 218 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
