drivers: espi: Change syscall APIs to pass structs by reference
Several functions that are syscalls were passing structs by value instead of by reference. Just changed that and implemented missing verfication handlers for them. Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
This commit is contained in:
parent
28b5057afc
commit
d62dd0737e
2 changed files with 156 additions and 28 deletions
|
@ -83,3 +83,129 @@ static inline int z_vrfy_espi_receive_vwire(struct device *dev,
|
|||
return ret;
|
||||
}
|
||||
#include <syscalls/espi_receive_vwire_mrsh.c>
|
||||
|
||||
static inline int z_vrfy_espi_read_request(struct device *dev,
|
||||
struct espi_request_packet *req)
|
||||
{
|
||||
int ret;
|
||||
struct espi_request_packet req_copy;
|
||||
|
||||
Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, read_request));
|
||||
Z_OOPS(z_user_from_copy(&req_copy, req,
|
||||
sizeof(struct espi_request_packet)));
|
||||
Z_OOPS(Z_SYSCALL_MEMORY_WRITE(req_copy.data, req_copy.len));
|
||||
|
||||
ret = z_impl_espi_read_request(dev, &req_copy);
|
||||
|
||||
Z_OOPS(z_user_to_copy(req, &req_copy,
|
||||
sizeof(struct espi_request_packet)));
|
||||
|
||||
return ret;
|
||||
}
|
||||
#include <syscalls/espi_read_request_mrsh.c>
|
||||
|
||||
static inline int z_vrfy_espi_write_request(struct device *dev,
|
||||
struct espi_request_packet *req)
|
||||
{
|
||||
int ret;
|
||||
struct espi_request_packet req_copy;
|
||||
|
||||
Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, write_request));
|
||||
Z_OOPS(Z_SYSCALL_MEMORY_READ(req->data, req->len));
|
||||
Z_OOPS(z_user_from_copy(&req_copy, req,
|
||||
sizeof(struct espi_request_packet)));
|
||||
|
||||
ret = z_impl_espi_write_request(dev, &req_copy);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#include <syscalls/espi_write_request_mrsh.c>
|
||||
|
||||
static inline int z_vrfy_espi_send_oob(struct device *dev,
|
||||
struct espi_oob_packet *pckt)
|
||||
{
|
||||
int ret;
|
||||
struct espi_oob_packet pckt_copy;
|
||||
|
||||
Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, send_oob));
|
||||
Z_OOPS(Z_SYSCALL_MEMORY_READ(pckt->buf, pckt->len));
|
||||
Z_OOPS(z_user_from_copy(&pckt_copy, pckt,
|
||||
sizeof(struct espi_oob_packet)));
|
||||
|
||||
ret = z_impl_espi_send_oob(dev, &pckt_copy);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#include <syscalls/espi_send_oob_mrsh.c>
|
||||
|
||||
static inline int z_vrfy_espi_receive_oob(struct device *dev,
|
||||
struct espi_oob_packet *pckt)
|
||||
{
|
||||
int ret;
|
||||
struct espi_oob_packet pckt_copy;
|
||||
|
||||
Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, receive_oob));
|
||||
Z_OOPS(z_user_from_copy(&pckt_copy, pckt,
|
||||
sizeof(struct espi_oob_packet)));
|
||||
Z_OOPS(Z_SYSCALL_MEMORY_WRITE(pckt->buf, pckt->len));
|
||||
|
||||
ret = z_impl_espi_receive_oob(dev, &pckt_copy);
|
||||
Z_OOPS(z_user_to_copy(pckt, &pckt_copy,
|
||||
sizeof(struct espi_oob_packet)));
|
||||
|
||||
return ret;
|
||||
}
|
||||
#include <syscalls/espi_receive_oob_mrsh.c>
|
||||
|
||||
static inline int z_vrfy_espi_read_flash(struct device *dev,
|
||||
struct espi_flash_packet *pckt)
|
||||
{
|
||||
int ret;
|
||||
struct espi_flash_packet pckt_copy;
|
||||
|
||||
Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, read_flash));
|
||||
Z_OOPS(z_user_from_copy(&pckt_copy, pckt,
|
||||
sizeof(struct espi_flash_packet)));
|
||||
Z_OOPS(Z_SYSCALL_MEMORY_WRITE(pckt->buf, pckt->len));
|
||||
|
||||
ret = z_impl_espi_read_flash(dev, pckt);
|
||||
Z_OOPS(z_user_to_copy(pckt, &pckt_copy,
|
||||
sizeof(struct espi_flash_packet)));
|
||||
|
||||
return ret;
|
||||
}
|
||||
#include <syscalls/espi_read_flash_mrsh.c>
|
||||
|
||||
static inline int z_vrfy_espi_write_flash(struct device *dev,
|
||||
struct espi_flash_packet *pckt)
|
||||
{
|
||||
int ret;
|
||||
struct espi_flash_packet pckt_copy;
|
||||
|
||||
Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, write_flash));
|
||||
Z_OOPS(z_user_from_copy(&pckt_copy, pckt,
|
||||
sizeof(struct espi_flash_packet)));
|
||||
Z_OOPS(Z_SYSCALL_MEMORY_READ(pckt->buf, pckt->len));
|
||||
|
||||
ret = z_impl_espi_write_flash(dev, &pckt_copy);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#include <syscalls/espi_write_flash_mrsh.c>
|
||||
|
||||
static inline int z_vrfy_espi_flash_erase(struct device *dev,
|
||||
struct espi_flash_packet *pckt)
|
||||
{
|
||||
int ret;
|
||||
struct espi_flash_packet pckt_copy;
|
||||
|
||||
Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, write_flash));
|
||||
Z_OOPS(z_user_from_copy(&pckt_copy, pckt,
|
||||
sizeof(struct espi_flash_packet)));
|
||||
Z_OOPS(Z_SYSCALL_MEMORY_READ(pckt->buf, pckt->len));
|
||||
|
||||
ret = z_impl_espi_flash_erase(dev, &pckt_copy);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#include <syscalls/espi_flash_erase_mrsh.c>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue