* [linux-next:master 2036/2633] fs/binfmt_aout.c:225:43: error: expected ')' before ';' token
@ 2021-05-12 12:50 kernel test robot
2021-05-12 13:14 ` David Hildenbrand
0 siblings, 1 reply; 2+ messages in thread
From: kernel test robot @ 2021-05-12 12:50 UTC (permalink / raw)
To: David Hildenbrand
Cc: kbuild-all, Linux Memory Management List, Kees Cook, Andrew Morton
[-- Attachment #1: Type: text/plain, Size: 7184 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: ec85c95b0c90a17413901b018e8ade7b9eae7cad
commit: 953f99327748a7ed47f6fdce8ec2df85e53c672c [2036/2633] binfmt: remove in-tree usage of MAP_EXECUTABLE
config: alpha-randconfig-r023-20210512 (attached as .config)
compiler: alpha-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=953f99327748a7ed47f6fdce8ec2df85e53c672c
git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git fetch --no-tags linux-next master
git checkout 953f99327748a7ed47f6fdce8ec2df85e53c672c
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=alpha
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
fs/binfmt_aout.c: In function 'load_aout_binary':
>> fs/binfmt_aout.c:225:43: error: expected ')' before ';' token
225 | MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE;
| ^
>> fs/binfmt_aout.c:223:11: error: too few arguments to function 'vm_mmap'
223 | error = vm_mmap(bprm->file, N_TXTADDR(ex), ex.a_text,
| ^~~~~~~
In file included from fs/binfmt_aout.c:12:
include/linux/mm.h:2631:35: note: declared here
2631 | extern unsigned long __must_check vm_mmap(struct file *, unsigned long,
| ^~~~~~~
fs/binfmt_aout.c:233:44: error: expected ')' before ';' token
233 | MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE;
| ^
fs/binfmt_aout.c:231:11: error: too few arguments to function 'vm_mmap'
231 | error = vm_mmap(bprm->file, N_DATADDR(ex), ex.a_data,
| ^~~~~~~
In file included from fs/binfmt_aout.c:12:
include/linux/mm.h:2631:35: note: declared here
2631 | extern unsigned long __must_check vm_mmap(struct file *, unsigned long,
| ^~~~~~~
vim +225 fs/binfmt_aout.c
111
112 /*
113 * These are the functions used to load a.out style executables and shared
114 * libraries. There is no binary dependent code anywhere else.
115 */
116
117 static int load_aout_binary(struct linux_binprm * bprm)
118 {
119 struct pt_regs *regs = current_pt_regs();
120 struct exec ex;
121 unsigned long error;
122 unsigned long fd_offset;
123 unsigned long rlim;
124 int retval;
125
126 ex = *((struct exec *) bprm->buf); /* exec-header */
127 if ((N_MAGIC(ex) != ZMAGIC && N_MAGIC(ex) != OMAGIC &&
128 N_MAGIC(ex) != QMAGIC && N_MAGIC(ex) != NMAGIC) ||
129 N_TRSIZE(ex) || N_DRSIZE(ex) ||
130 i_size_read(file_inode(bprm->file)) < ex.a_text+ex.a_data+N_SYMSIZE(ex)+N_TXTOFF(ex)) {
131 return -ENOEXEC;
132 }
133
134 /*
135 * Requires a mmap handler. This prevents people from using a.out
136 * as part of an exploit attack against /proc-related vulnerabilities.
137 */
138 if (!bprm->file->f_op->mmap)
139 return -ENOEXEC;
140
141 fd_offset = N_TXTOFF(ex);
142
143 /* Check initial limits. This avoids letting people circumvent
144 * size limits imposed on them by creating programs with large
145 * arrays in the data or bss.
146 */
147 rlim = rlimit(RLIMIT_DATA);
148 if (rlim >= RLIM_INFINITY)
149 rlim = ~0;
150 if (ex.a_data + ex.a_bss > rlim)
151 return -ENOMEM;
152
153 /* Flush all traces of the currently running executable */
154 retval = begin_new_exec(bprm);
155 if (retval)
156 return retval;
157
158 /* OK, This is the point of no return */
159 #ifdef __alpha__
160 SET_AOUT_PERSONALITY(bprm, ex);
161 #else
162 set_personality(PER_LINUX);
163 #endif
164 setup_new_exec(bprm);
165
166 current->mm->end_code = ex.a_text +
167 (current->mm->start_code = N_TXTADDR(ex));
168 current->mm->end_data = ex.a_data +
169 (current->mm->start_data = N_DATADDR(ex));
170 current->mm->brk = ex.a_bss +
171 (current->mm->start_brk = N_BSSADDR(ex));
172
173 retval = setup_arg_pages(bprm, STACK_TOP, EXSTACK_DEFAULT);
174 if (retval < 0)
175 return retval;
176
177
178 if (N_MAGIC(ex) == OMAGIC) {
179 unsigned long text_addr, map_size;
180 loff_t pos;
181
182 text_addr = N_TXTADDR(ex);
183
184 #ifdef __alpha__
185 pos = fd_offset;
186 map_size = ex.a_text+ex.a_data + PAGE_SIZE - 1;
187 #else
188 pos = 32;
189 map_size = ex.a_text+ex.a_data;
190 #endif
191 error = vm_brk(text_addr & PAGE_MASK, map_size);
192 if (error)
193 return error;
194
195 error = read_code(bprm->file, text_addr, pos,
196 ex.a_text+ex.a_data);
197 if ((signed long)error < 0)
198 return error;
199 } else {
200 if ((ex.a_text & 0xfff || ex.a_data & 0xfff) &&
201 (N_MAGIC(ex) != NMAGIC) && printk_ratelimit())
202 {
203 printk(KERN_NOTICE "executable not page aligned\n");
204 }
205
206 if ((fd_offset & ~PAGE_MASK) != 0 && printk_ratelimit())
207 {
208 printk(KERN_WARNING
209 "fd_offset is not page aligned. Please convert program: %pD\n",
210 bprm->file);
211 }
212
213 if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
214 error = vm_brk(N_TXTADDR(ex), ex.a_text+ex.a_data);
215 if (error)
216 return error;
217
218 read_code(bprm->file, N_TXTADDR(ex), fd_offset,
219 ex.a_text + ex.a_data);
220 goto beyond_if;
221 }
222
> 223 error = vm_mmap(bprm->file, N_TXTADDR(ex), ex.a_text,
224 PROT_READ | PROT_EXEC,
> 225 MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE;
226 fd_offset);
227
228 if (error != N_TXTADDR(ex))
229 return error;
230
231 error = vm_mmap(bprm->file, N_DATADDR(ex), ex.a_data,
232 PROT_READ | PROT_WRITE | PROT_EXEC,
233 MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE;
234 fd_offset + ex.a_text);
235 if (error != N_DATADDR(ex))
236 return error;
237 }
238 beyond_if:
239 set_binfmt(&aout_format);
240
241 retval = set_brk(current->mm->start_brk, current->mm->brk);
242 if (retval < 0)
243 return retval;
244
245 current->mm->start_stack =
246 (unsigned long) create_aout_tables((char __user *) bprm->p, bprm);
247 #ifdef __alpha__
248 regs->gp = ex.a_gpvalue;
249 #endif
250 finalize_exec(bprm);
251 start_thread(regs, ex.a_entry, current->mm->start_stack);
252 return 0;
253 }
254
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 29983 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [linux-next:master 2036/2633] fs/binfmt_aout.c:225:43: error: expected ')' before ';' token
2021-05-12 12:50 [linux-next:master 2036/2633] fs/binfmt_aout.c:225:43: error: expected ')' before ';' token kernel test robot
@ 2021-05-12 13:14 ` David Hildenbrand
0 siblings, 0 replies; 2+ messages in thread
From: David Hildenbrand @ 2021-05-12 13:14 UTC (permalink / raw)
To: kernel test robot
Cc: kbuild-all, Linux Memory Management List, Kees Cook, Andrew Morton
On 12.05.21 14:50, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head: ec85c95b0c90a17413901b018e8ade7b9eae7cad
> commit: 953f99327748a7ed47f6fdce8ec2df85e53c672c [2036/2633] binfmt: remove in-tree usage of MAP_EXECUTABLE
> config: alpha-randconfig-r023-20210512 (attached as .config)
> compiler: alpha-linux-gcc (GCC) 9.3.0
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=953f99327748a7ed47f6fdce8ec2df85e53c672c
> git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
> git fetch --no-tags linux-next master
> git checkout 953f99327748a7ed47f6fdce8ec2df85e53c672c
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=alpha
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All errors (new ones prefixed by >>):
>
> fs/binfmt_aout.c: In function 'load_aout_binary':
>>> fs/binfmt_aout.c:225:43: error: expected ')' before ';' token
> 225 | MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE;
> | ^
>>> fs/binfmt_aout.c:223:11: error: too few arguments to function 'vm_mmap'
> 223 | error = vm_mmap(bprm->file, N_TXTADDR(ex), ex.a_text,
> | ^~~~~~~
> In file included from fs/binfmt_aout.c:12:
> include/linux/mm.h:2631:35: note: declared here
> 2631 | extern unsigned long __must_check vm_mmap(struct file *, unsigned long,
> | ^~~~~~~
> fs/binfmt_aout.c:233:44: error: expected ')' before ';' token
> 233 | MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE;
> | ^
> fs/binfmt_aout.c:231:11: error: too few arguments to function 'vm_mmap'
> 231 | error = vm_mmap(bprm->file, N_DATADDR(ex), ex.a_data,
> | ^~~~~~~
> In file included from fs/binfmt_aout.c:12:
> include/linux/mm.h:2631:35: note: declared here
> 2631 | extern unsigned long __must_check vm_mmap(struct file *, unsigned long,
> | ^~~~~~~
>
>
> vim +225 fs/binfmt_aout.c
>
> 111
> 112 /*
> 113 * These are the functions used to load a.out style executables and shared
> 114 * libraries. There is no binary dependent code anywhere else.
> 115 */
> 116
> 117 static int load_aout_binary(struct linux_binprm * bprm)
> 118 {
> 119 struct pt_regs *regs = current_pt_regs();
> 120 struct exec ex;
> 121 unsigned long error;
> 122 unsigned long fd_offset;
> 123 unsigned long rlim;
> 124 int retval;
> 125
> 126 ex = *((struct exec *) bprm->buf); /* exec-header */
> 127 if ((N_MAGIC(ex) != ZMAGIC && N_MAGIC(ex) != OMAGIC &&
> 128 N_MAGIC(ex) != QMAGIC && N_MAGIC(ex) != NMAGIC) ||
> 129 N_TRSIZE(ex) || N_DRSIZE(ex) ||
> 130 i_size_read(file_inode(bprm->file)) < ex.a_text+ex.a_data+N_SYMSIZE(ex)+N_TXTOFF(ex)) {
> 131 return -ENOEXEC;
> 132 }
> 133
> 134 /*
> 135 * Requires a mmap handler. This prevents people from using a.out
> 136 * as part of an exploit attack against /proc-related vulnerabilities.
> 137 */
> 138 if (!bprm->file->f_op->mmap)
> 139 return -ENOEXEC;
> 140
> 141 fd_offset = N_TXTOFF(ex);
> 142
> 143 /* Check initial limits. This avoids letting people circumvent
> 144 * size limits imposed on them by creating programs with large
> 145 * arrays in the data or bss.
> 146 */
> 147 rlim = rlimit(RLIMIT_DATA);
> 148 if (rlim >= RLIM_INFINITY)
> 149 rlim = ~0;
> 150 if (ex.a_data + ex.a_bss > rlim)
> 151 return -ENOMEM;
> 152
> 153 /* Flush all traces of the currently running executable */
> 154 retval = begin_new_exec(bprm);
> 155 if (retval)
> 156 return retval;
> 157
> 158 /* OK, This is the point of no return */
> 159 #ifdef __alpha__
> 160 SET_AOUT_PERSONALITY(bprm, ex);
> 161 #else
> 162 set_personality(PER_LINUX);
> 163 #endif
> 164 setup_new_exec(bprm);
> 165
> 166 current->mm->end_code = ex.a_text +
> 167 (current->mm->start_code = N_TXTADDR(ex));
> 168 current->mm->end_data = ex.a_data +
> 169 (current->mm->start_data = N_DATADDR(ex));
> 170 current->mm->brk = ex.a_bss +
> 171 (current->mm->start_brk = N_BSSADDR(ex));
> 172
> 173 retval = setup_arg_pages(bprm, STACK_TOP, EXSTACK_DEFAULT);
> 174 if (retval < 0)
> 175 return retval;
> 176
> 177
> 178 if (N_MAGIC(ex) == OMAGIC) {
> 179 unsigned long text_addr, map_size;
> 180 loff_t pos;
> 181
> 182 text_addr = N_TXTADDR(ex);
> 183
> 184 #ifdef __alpha__
> 185 pos = fd_offset;
> 186 map_size = ex.a_text+ex.a_data + PAGE_SIZE - 1;
> 187 #else
> 188 pos = 32;
> 189 map_size = ex.a_text+ex.a_data;
> 190 #endif
> 191 error = vm_brk(text_addr & PAGE_MASK, map_size);
> 192 if (error)
> 193 return error;
> 194
> 195 error = read_code(bprm->file, text_addr, pos,
> 196 ex.a_text+ex.a_data);
> 197 if ((signed long)error < 0)
> 198 return error;
> 199 } else {
> 200 if ((ex.a_text & 0xfff || ex.a_data & 0xfff) &&
> 201 (N_MAGIC(ex) != NMAGIC) && printk_ratelimit())
> 202 {
> 203 printk(KERN_NOTICE "executable not page aligned\n");
> 204 }
> 205
> 206 if ((fd_offset & ~PAGE_MASK) != 0 && printk_ratelimit())
> 207 {
> 208 printk(KERN_WARNING
> 209 "fd_offset is not page aligned. Please convert program: %pD\n",
> 210 bprm->file);
> 211 }
> 212
> 213 if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
> 214 error = vm_brk(N_TXTADDR(ex), ex.a_text+ex.a_data);
> 215 if (error)
> 216 return error;
> 217
> 218 read_code(bprm->file, N_TXTADDR(ex), fd_offset,
> 219 ex.a_text + ex.a_data);
> 220 goto beyond_if;
> 221 }
> 222
> > 223 error = vm_mmap(bprm->file, N_TXTADDR(ex), ex.a_text,
> 224 PROT_READ | PROT_EXEC,
> > 225 MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE;
> 226 fd_offset);
> 227
> 228 if (error != N_TXTADDR(ex))
> 229 return error;
> 230
> 231 error = vm_mmap(bprm->file, N_DATADDR(ex), ex.a_data,
> 232 PROT_READ | PROT_WRITE | PROT_EXEC,
> 233 MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE;
> 234 fd_offset + ex.a_text);
> 235 if (error != N_DATADDR(ex))
> 236 return error;
> 237 }
Fix should be simple (wasn't expecting this file only buils on alpha),
asked Andrew in the original patch on how to best route the build fix
https://lkml.kernel.org/r/49a8cb62-e26d-a351-937e-6fb62a6f4a2e@redhat.com
--
Thanks,
David / dhildenb
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-05-12 13:14 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-12 12:50 [linux-next:master 2036/2633] fs/binfmt_aout.c:225:43: error: expected ')' before ';' token kernel test robot
2021-05-12 13:14 ` David Hildenbrand
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).