mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-22 03:04:34 +01:00
LinuxKPI: Add DEFINE_DEBUGFS_ATTRIBUTE_SIGNED to linux/debugfs.h
Sponsored by: Serenity CyberSecurity, LLC MFC after: 1 week Reviewed by: manu Differential Revision: https://reviews.freebsd.org/D45615
This commit is contained in:
parent
e1b0f431a1
commit
8c5c572125
@ -88,6 +88,8 @@ void debugfs_remove_recursive(struct dentry *dentry);
|
||||
|
||||
#define DEFINE_DEBUGFS_ATTRIBUTE(__fops, __get, __set, __fmt) \
|
||||
DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt)
|
||||
#define DEFINE_DEBUGFS_ATTRIBUTE_SIGNED(__fops, __get, __set, __fmt) \
|
||||
DEFINE_SIMPLE_ATTRIBUTE_SIGNED(__fops, __get, __set, __fmt)
|
||||
|
||||
void debugfs_create_bool(const char *name, umode_t mode, struct dentry *parent,
|
||||
bool *value);
|
||||
|
@ -374,7 +374,7 @@ simple_read_from_buffer(void __user *dest, size_t read_size, loff_t *ppos,
|
||||
|
||||
MALLOC_DECLARE(M_LSATTR);
|
||||
|
||||
#define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \
|
||||
#define __DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt, __wrfunc)\
|
||||
static inline int \
|
||||
__fops ## _open(struct inode *inode, struct file *filp) \
|
||||
{ \
|
||||
@ -385,10 +385,15 @@ static const struct file_operations __fops = { \
|
||||
.open = __fops ## _open, \
|
||||
.release = simple_attr_release, \
|
||||
.read = simple_attr_read, \
|
||||
.write = simple_attr_write, \
|
||||
.write = __wrfunc, \
|
||||
.llseek = no_llseek \
|
||||
}
|
||||
|
||||
#define DEFINE_SIMPLE_ATTRIBUTE(fops, get, set, fmt) \
|
||||
__DEFINE_SIMPLE_ATTRIBUTE(fops, get, set, fmt, simple_attr_write)
|
||||
#define DEFINE_SIMPLE_ATTRIBUTE_SIGNED(fops, get, set, fmt) \
|
||||
__DEFINE_SIMPLE_ATTRIBUTE(fops, get, set, fmt, simple_attr_write_signed)
|
||||
|
||||
int simple_attr_open(struct inode *inode, struct file *filp,
|
||||
int (*get)(void *, uint64_t *), int (*set)(void *, uint64_t),
|
||||
const char *fmt);
|
||||
@ -399,4 +404,7 @@ ssize_t simple_attr_read(struct file *filp, char *buf, size_t read_size, loff_t
|
||||
|
||||
ssize_t simple_attr_write(struct file *filp, const char *buf, size_t write_size, loff_t *ppos);
|
||||
|
||||
ssize_t simple_attr_write_signed(struct file *filp, const char *buf,
|
||||
size_t write_size, loff_t *ppos);
|
||||
|
||||
#endif /* _LINUXKPI_LINUX_FS_H_ */
|
||||
|
@ -138,12 +138,13 @@ unlock:
|
||||
}
|
||||
|
||||
/*
|
||||
* simple_attr_write: write contents of buffer into simple attribute file
|
||||
* simple_attr_write_common: write contents of buffer into simple attribute file
|
||||
*
|
||||
* @filp: file pointer
|
||||
* @buf: kernel space buffer
|
||||
* @write_size: number bytes to be transferred
|
||||
* @ppos: starting pointer position for transfer
|
||||
* @is_signed: signedness of data in @buf
|
||||
*
|
||||
* The simple_attr structure is stored in filp->private_data.
|
||||
* Convert the @buf string to unsigned long long.
|
||||
@ -153,8 +154,9 @@ unlock:
|
||||
* On success, number of bytes written to simple attr
|
||||
* On failure, negative signed ERRNO
|
||||
*/
|
||||
ssize_t
|
||||
simple_attr_write(struct file *filp, const char *buf, size_t write_size, loff_t *ppos)
|
||||
static ssize_t
|
||||
simple_attr_write_common(struct file *filp, const char *buf, size_t write_size,
|
||||
loff_t *ppos, bool is_signed)
|
||||
{
|
||||
struct simple_attr *sattr;
|
||||
unsigned long long data;
|
||||
@ -172,6 +174,9 @@ simple_attr_write(struct file *filp, const char *buf, size_t write_size, loff_t
|
||||
|
||||
mutex_lock(&sattr->mutex);
|
||||
|
||||
if (is_signed)
|
||||
ret = kstrtoll(buf + *ppos, 0, &data);
|
||||
else
|
||||
ret = kstrtoull(buf + *ppos, 0, &data);
|
||||
if (ret)
|
||||
goto unlock;
|
||||
@ -186,3 +191,17 @@ unlock:
|
||||
mutex_unlock(&sattr->mutex);
|
||||
return (ret);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
simple_attr_write(struct file *filp, const char *buf, size_t write_size,
|
||||
loff_t *ppos)
|
||||
{
|
||||
return (simple_attr_write_common(filp, buf, write_size, ppos, false));
|
||||
}
|
||||
|
||||
ssize_t
|
||||
simple_attr_write_signed(struct file *filp, const char *buf, size_t write_size,
|
||||
loff_t *ppos)
|
||||
{
|
||||
return (simple_attr_write_common(filp, buf, write_size, ppos, true));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user