diff options
| author | John Hubbard <[email protected]> | 2020-05-21 21:15:05 -0700 |
|---|---|---|
| committer | Sam Ravnborg <[email protected]> | 2020-05-31 22:54:33 +0200 |
| commit | e2e1c7bda4445363027a4ceed1cc3a8ccc2472a9 (patch) | |
| tree | 52345346eb2fe44c723afd9971f20d359210b8fd /tools/perf/scripts/python/bin/export-to-postgresql-report | |
| parent | 5a4784f49b2dcfff888f0ac97b981224c57c55fc (diff) | |
video: fbdev: fix error handling for get_user_pages_fast()
Dealing with the return value of get_user_pages*() variants has a few
classic pitfalls, and this driver found one of them: the return value
might be zero, positive, or -errno. And if positive, it might be fewer
pages than were requested. And if fewer pages than requested, then
the caller should return (via put_page()) the pages that *were*
pinned.
This driver was doing that *except* that it had a problem with the
-errno case, which was being stored in an unsigned int, and which
would case an interesting mess if it ever happened: nr_pages would be
interpreted as a spectacularly huge unsigned value, rather than a
small negative value. Also, it was unnecessarily overriding a
potentially informative -errno, with -EINVAL, in some cases.
Instead: clamp the nr_pages to zero or positive, so that the error
handling works. And return the -errno value from get_user_pages*(),
unchanged, if we get one. And explain this with comments, seeing as
how it is error-prone.
Cc: Bartlomiej Zolnierkiewicz <[email protected]>
Cc: Arnd Bergmann <[email protected]>
Cc: Daniel Vetter <[email protected]>
Cc: Gustavo A. R. Silva <[email protected]>
Cc: Jani Nikula <[email protected]>
Cc: [email protected]
Cc: [email protected]
Signed-off-by: John Hubbard <[email protected]>
Signed-off-by: Sam Ravnborg <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
Diffstat (limited to 'tools/perf/scripts/python/bin/export-to-postgresql-report')
0 files changed, 0 insertions, 0 deletions