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 DEFINE_DEBUGFS_ATTRIBUTE(__fops, __get, __set, __fmt) \
|
||||||
DEFINE_SIMPLE_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,
|
void debugfs_create_bool(const char *name, umode_t mode, struct dentry *parent,
|
||||||
bool *value);
|
bool *value);
|
||||||
|
@ -374,7 +374,7 @@ simple_read_from_buffer(void __user *dest, size_t read_size, loff_t *ppos,
|
|||||||
|
|
||||||
MALLOC_DECLARE(M_LSATTR);
|
MALLOC_DECLARE(M_LSATTR);
|
||||||
|
|
||||||
#define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \
|
#define __DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt, __wrfunc)\
|
||||||
static inline int \
|
static inline int \
|
||||||
__fops ## _open(struct inode *inode, struct file *filp) \
|
__fops ## _open(struct inode *inode, struct file *filp) \
|
||||||
{ \
|
{ \
|
||||||
@ -385,10 +385,15 @@ static const struct file_operations __fops = { \
|
|||||||
.open = __fops ## _open, \
|
.open = __fops ## _open, \
|
||||||
.release = simple_attr_release, \
|
.release = simple_attr_release, \
|
||||||
.read = simple_attr_read, \
|
.read = simple_attr_read, \
|
||||||
.write = simple_attr_write, \
|
.write = __wrfunc, \
|
||||||
.llseek = no_llseek \
|
.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 simple_attr_open(struct inode *inode, struct file *filp,
|
||||||
int (*get)(void *, uint64_t *), int (*set)(void *, uint64_t),
|
int (*get)(void *, uint64_t *), int (*set)(void *, uint64_t),
|
||||||
const char *fmt);
|
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(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_ */
|
#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
|
* @filp: file pointer
|
||||||
* @buf: kernel space buffer
|
* @buf: kernel space buffer
|
||||||
* @write_size: number bytes to be transferred
|
* @write_size: number bytes to be transferred
|
||||||
* @ppos: starting pointer position for transfer
|
* @ppos: starting pointer position for transfer
|
||||||
|
* @is_signed: signedness of data in @buf
|
||||||
*
|
*
|
||||||
* The simple_attr structure is stored in filp->private_data.
|
* The simple_attr structure is stored in filp->private_data.
|
||||||
* Convert the @buf string to unsigned long long.
|
* Convert the @buf string to unsigned long long.
|
||||||
@ -153,8 +154,9 @@ unlock:
|
|||||||
* On success, number of bytes written to simple attr
|
* On success, number of bytes written to simple attr
|
||||||
* On failure, negative signed ERRNO
|
* On failure, negative signed ERRNO
|
||||||
*/
|
*/
|
||||||
ssize_t
|
static ssize_t
|
||||||
simple_attr_write(struct file *filp, const char *buf, size_t write_size, loff_t *ppos)
|
simple_attr_write_common(struct file *filp, const char *buf, size_t write_size,
|
||||||
|
loff_t *ppos, bool is_signed)
|
||||||
{
|
{
|
||||||
struct simple_attr *sattr;
|
struct simple_attr *sattr;
|
||||||
unsigned long long data;
|
unsigned long long data;
|
||||||
@ -172,7 +174,10 @@ simple_attr_write(struct file *filp, const char *buf, size_t write_size, loff_t
|
|||||||
|
|
||||||
mutex_lock(&sattr->mutex);
|
mutex_lock(&sattr->mutex);
|
||||||
|
|
||||||
ret = kstrtoull(buf + *ppos, 0, &data);
|
if (is_signed)
|
||||||
|
ret = kstrtoll(buf + *ppos, 0, &data);
|
||||||
|
else
|
||||||
|
ret = kstrtoull(buf + *ppos, 0, &data);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
|
||||||
@ -186,3 +191,17 @@ unlock:
|
|||||||
mutex_unlock(&sattr->mutex);
|
mutex_unlock(&sattr->mutex);
|
||||||
return (ret);
|
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