projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: lib_ring_buffer_copy_from_user_inatomic error handling
[lttng-modules.git]
/
lib
/
ringbuffer
/
backend.h
diff --git
a/lib/ringbuffer/backend.h
b/lib/ringbuffer/backend.h
index aadc9c37b1d2b3f7870a2ad87f184ae736c0aafc..b908ed06e92665e127bac42e19d57ffbb7ec9670 100644
(file)
--- a/
lib/ringbuffer/backend.h
+++ b/
lib/ringbuffer/backend.h
@@
-37,8
+37,8
@@
#include <linux/uaccess.h>
/* Internal helpers */
#include <linux/uaccess.h>
/* Internal helpers */
-#include
"../../wrapper/ringbuffer/backend_internal.h"
-#include
"../../wrapper/ringbuffer/frontend_internal.h"
+#include
<wrapper/ringbuffer/backend_internal.h>
+#include
<wrapper/ringbuffer/frontend_internal.h>
/* Ring buffer backend API */
/* Ring buffer backend API */
@@
-54,8
+54,8
@@
extern int __lib_ring_buffer_copy_to_user(struct lib_ring_buffer_backend *bufb,
extern int lib_ring_buffer_read_cstr(struct lib_ring_buffer_backend *bufb,
size_t offset, void *dest, size_t len);
extern int lib_ring_buffer_read_cstr(struct lib_ring_buffer_backend *bufb,
size_t offset, void *dest, size_t len);
-extern
struct page *
*
-lib_ring_buffer_read_get_p
age
(struct lib_ring_buffer_backend *bufb, size_t offset,
+extern
unsigned long
*
+lib_ring_buffer_read_get_p
fn
(struct lib_ring_buffer_backend *bufb, size_t offset,
void ***virt);
/*
void ***virt);
/*
@@
-209,7
+209,7
@@
size_t lib_ring_buffer_do_strcpy_from_user_inatomic(const struct lib_ring_buffer
int ret;
char c;
int ret;
char c;
- ret = __
get_user(c, &src[count]
);
+ ret = __
copy_from_user_inatomic(&c, src + count, 1
);
if (ret || !c)
break;
lib_ring_buffer_do_copy(config, &dest[count], &c, 1);
if (ret || !c)
break;
lib_ring_buffer_do_copy(config, &dest[count], &c, 1);
@@
-334,8
+334,7
@@
void lib_ring_buffer_copy_from_user_inatomic(const struct lib_ring_buffer_config
rpages->p[index].virt + (offset & ~PAGE_MASK),
src, len);
if (unlikely(ret > 0)) {
rpages->p[index].virt + (offset & ~PAGE_MASK),
src, len);
if (unlikely(ret > 0)) {
- len -= (pagecpy - ret);
- offset += (pagecpy - ret);
+ /* Copy failed. */
goto fill_buffer;
}
} else {
goto fill_buffer;
}
} else {
This page took
0.024379 seconds
and
4
git commands to generate.