* re: Thermal: int340x_thermal: expose acpi thermal relationship tables
@ 2014-10-13 17:41 Dan Carpenter
2014-11-04 23:23 ` Jacob Pan
0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2014-10-13 17:41 UTC (permalink / raw)
To: jacob.jun.pan; +Cc: linux-pm
Hello Jacob Pan,
The patch 52b1c69d7e3c: "Thermal: int340x_thermal: expose acpi
thermal relationship tables" from Sep 3, 2014, leads to the following
static checker warning:
drivers/thermal/int340x_thermal/acpi_thermal_rel.c:327 acpi_thermal_rel_ioctl()
warn: passing casted pointer '&count' to 'acpi_parse_trt()' 64 vs 32.
drivers/thermal/int340x_thermal/acpi_thermal_rel.c
315 static long acpi_thermal_rel_ioctl(struct file *f, unsigned int cmd,
316 unsigned long __arg)
317 {
318 int ret = 0;
319 unsigned long length = 0;
320 unsigned long count = 0;
321 char __user *arg = (void __user *)__arg;
322 struct trt *trts;
323 struct art *arts;
324
325 switch (cmd) {
326 case ACPI_THERMAL_GET_TRT_COUNT:
327 ret = acpi_parse_trt(acpi_thermal_rel_handle, (int *)&count,
^^^^^^^^^^^^
The reason for the static checker warning is that this will not work on
big endian 64 bit systems. It's most likely not a concern but it's
still pretty ugly.
You could just make "count" an int and remove the casting. The copy to
user will still work if it's an int because the user pointer has been
casted to unsigned long __user pointer.
328 &trts, false);
329 kfree(trts);
330 if (!ret)
331 return put_user(count, (unsigned long __user *)__arg);
332 return ret;
333 case ACPI_THERMAL_GET_TRT_LEN:
regards,
dan carpenter
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: Thermal: int340x_thermal: expose acpi thermal relationship tables
2014-10-13 17:41 Thermal: int340x_thermal: expose acpi thermal relationship tables Dan Carpenter
@ 2014-11-04 23:23 ` Jacob Pan
0 siblings, 0 replies; 2+ messages in thread
From: Jacob Pan @ 2014-11-04 23:23 UTC (permalink / raw)
To: Dan Carpenter; +Cc: linux-pm, Zhang, Rui
On Mon, 13 Oct 2014 20:41:11 +0300
Dan Carpenter <dan.carpenter@oracle.com> wrote:
> Hello Jacob Pan,
>
> The patch 52b1c69d7e3c: "Thermal: int340x_thermal: expose acpi
> thermal relationship tables" from Sep 3, 2014, leads to the following
> static checker warning:
>
> drivers/thermal/int340x_thermal/acpi_thermal_rel.c:327
> acpi_thermal_rel_ioctl() warn: passing casted pointer '&count' to
> 'acpi_parse_trt()' 64 vs 32.
>
> drivers/thermal/int340x_thermal/acpi_thermal_rel.c
> 315 static long acpi_thermal_rel_ioctl(struct file *f, unsigned
> int cmd, 316 unsigned long __arg)
> 317 {
> 318 int ret = 0;
> 319 unsigned long length = 0;
> 320 unsigned long count = 0;
> 321 char __user *arg = (void __user *)__arg;
> 322 struct trt *trts;
> 323 struct art *arts;
> 324
> 325 switch (cmd) {
> 326 case ACPI_THERMAL_GET_TRT_COUNT:
> 327 ret = acpi_parse_trt(acpi_thermal_rel_handle,
> (int *)&count, ^^^^^^^^^^^^
> The reason for the static checker warning is that this will not work
> on big endian 64 bit systems. It's most likely not a concern but it's
> still pretty ugly.
>
> You could just make "count" an int and remove the casting. The copy
> to user will still work if it's an int because the user pointer has
> been casted to unsigned long __user pointer.
you are right, I will make the change. Thanks for pointing this out and
sorry for the late response, I was traveling.
>
> 328 &trts, false);
> 329 kfree(trts);
> 330 if (!ret)
> 331 return put_user(count, (unsigned long
> __user *)__arg); 332 return ret;
> 333 case ACPI_THERMAL_GET_TRT_LEN:
>
> regards,
> dan carpenter
[Jacob Pan]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-11-04 23:23 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-13 17:41 Thermal: int340x_thermal: expose acpi thermal relationship tables Dan Carpenter
2014-11-04 23:23 ` Jacob Pan
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).