This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new d09dc08eab sched/mqueue: do sanity check if DEBUG_FEATURES is enabled
d09dc08eab is described below
commit d09dc08eabde2b50b02b66c2f5700b1ca5cb3da4
Author: chao.an <[email protected]>
AuthorDate: Thu Jun 9 13:37:11 2022 +0800
sched/mqueue: do sanity check if DEBUG_FEATURES is enabled
Signed-off-by: chao.an <[email protected]>
---
sched/mqueue/mq_rcvinternal.c | 18 ++++++++++++++----
sched/mqueue/mq_receive.c | 12 +++---------
sched/mqueue/mq_send.c | 12 +++---------
sched/mqueue/mq_sndinternal.c | 19 +++++++++++++++----
sched/mqueue/mq_timedreceive.c | 12 +++---------
sched/mqueue/mq_timedsend.c | 12 +++---------
sched/mqueue/mqueue.h | 15 +++++++++++----
7 files changed, 52 insertions(+), 48 deletions(-)
diff --git a/sched/mqueue/mq_rcvinternal.c b/sched/mqueue/mq_rcvinternal.c
index f369e541e6..f8c56e9524 100644
--- a/sched/mqueue/mq_rcvinternal.c
+++ b/sched/mqueue/mq_rcvinternal.c
@@ -54,7 +54,6 @@
*
* Input Parameters:
* msgq - Message queue descriptor
- * oflags - flags from user set
* msg - Buffer to receive the message
* msglen - Size of the buffer in bytes
*
@@ -69,9 +68,19 @@
*
****************************************************************************/
-int nxmq_verify_receive(FAR struct mqueue_inode_s *msgq,
- int oflags, FAR char *msg, size_t msglen)
+#ifdef CONFIG_DEBUG_FEATURES
+int nxmq_verify_receive(FAR struct file *mq, FAR char *msg, size_t msglen)
{
+ FAR struct inode *inode = mq->f_inode;
+ FAR struct mqueue_inode_s *msgq;
+
+ if (inode == NULL)
+ {
+ return -EBADF;
+ }
+
+ msgq = inode->i_private;
+
/* Verify the input parameters */
if (!msg || !msgq)
@@ -79,7 +88,7 @@ int nxmq_verify_receive(FAR struct mqueue_inode_s *msgq,
return -EINVAL;
}
- if ((oflags & O_RDOK) == 0)
+ if ((mq->f_oflags & O_RDOK) == 0)
{
return -EPERM;
}
@@ -91,6 +100,7 @@ int nxmq_verify_receive(FAR struct mqueue_inode_s *msgq,
return OK;
}
+#endif
/****************************************************************************
* Name: nxmq_wait_receive
diff --git a/sched/mqueue/mq_receive.c b/sched/mqueue/mq_receive.c
index ebe4209c23..89725e3304 100644
--- a/sched/mqueue/mq_receive.c
+++ b/sched/mqueue/mq_receive.c
@@ -73,31 +73,25 @@
ssize_t file_mq_receive(FAR struct file *mq, FAR char *msg, size_t msglen,
FAR unsigned int *prio)
{
- FAR struct inode *inode = mq->f_inode;
FAR struct mqueue_inode_s *msgq;
FAR struct mqueue_msg_s *mqmsg;
irqstate_t flags;
ssize_t ret;
- if (!inode)
- {
- return -EBADF;
- }
-
- msgq = inode->i_private;
-
DEBUGASSERT(up_interrupt_context() == false);
/* Verify the input parameters and, in case of an error, set
* errno appropriately.
*/
- ret = nxmq_verify_receive(msgq, mq->f_oflags, msg, msglen);
+ ret = nxmq_verify_receive(mq, msg, msglen);
if (ret < 0)
{
return ret;
}
+ msgq = mq->f_inode->i_private;
+
/* Furthermore, nxmq_wait_receive() expects to have interrupts disabled
* because messages can be sent from interrupt level.
*/
diff --git a/sched/mqueue/mq_send.c b/sched/mqueue/mq_send.c
index 730e49b262..8fed5373cd 100644
--- a/sched/mqueue/mq_send.c
+++ b/sched/mqueue/mq_send.c
@@ -70,29 +70,23 @@
int file_mq_send(FAR struct file *mq, FAR const char *msg, size_t msglen,
unsigned int prio)
{
- FAR struct inode *inode = mq->f_inode;
FAR struct mqueue_inode_s *msgq;
FAR struct mqueue_msg_s *mqmsg;
irqstate_t flags;
int ret;
- if (!inode)
- {
- return -EBADF;
- }
-
- msgq = inode->i_private;
-
/* Verify the input parameters -- setting errno appropriately
* on any failures to verify.
*/
- ret = nxmq_verify_send(msgq, mq->f_oflags, msg, msglen, prio);
+ ret = nxmq_verify_send(mq, msg, msglen, prio);
if (ret < 0)
{
return ret;
}
+ msgq = mq->f_inode->i_private;
+
/* Allocate a message structure:
* - Immediately if we are called from an interrupt handler.
* - Immediately if the message queue is not full, or
diff --git a/sched/mqueue/mq_sndinternal.c b/sched/mqueue/mq_sndinternal.c
index 32ae205427..d63716207f 100644
--- a/sched/mqueue/mq_sndinternal.c
+++ b/sched/mqueue/mq_sndinternal.c
@@ -57,7 +57,6 @@
*
* Input Parameters:
* msgq - Message queue descriptor
- * oflags - flags from user set
* msg - Message to send
* msglen - The length of the message in bytes
* prio - The priority of the message
@@ -73,9 +72,20 @@
*
****************************************************************************/
-int nxmq_verify_send(FAR struct mqueue_inode_s *msgq, int oflags,
- FAR const char *msg, size_t msglen, unsigned int prio)
+#ifdef CONFIG_DEBUG_FEATURES
+int nxmq_verify_send(FAR FAR struct file *mq, FAR const char *msg,
+ size_t msglen, unsigned int prio)
{
+ FAR struct inode *inode = mq->f_inode;
+ FAR struct mqueue_inode_s *msgq;
+
+ if (inode == NULL)
+ {
+ return -EBADF;
+ }
+
+ msgq = inode->i_private;
+
/* Verify the input parameters */
if (msg == NULL || msgq == NULL || prio > MQ_PRIO_MAX)
@@ -83,7 +93,7 @@ int nxmq_verify_send(FAR struct mqueue_inode_s *msgq, int
oflags,
return -EINVAL;
}
- if ((oflags & O_WROK) == 0)
+ if ((mq->f_oflags & O_WROK) == 0)
{
return -EPERM;
}
@@ -95,6 +105,7 @@ int nxmq_verify_send(FAR struct mqueue_inode_s *msgq, int
oflags,
return OK;
}
+#endif
/****************************************************************************
* Name: nxmq_alloc_msg
diff --git a/sched/mqueue/mq_timedreceive.c b/sched/mqueue/mq_timedreceive.c
index 9e3f9b8582..71460f65ec 100644
--- a/sched/mqueue/mq_timedreceive.c
+++ b/sched/mqueue/mq_timedreceive.c
@@ -138,27 +138,19 @@ ssize_t file_mq_timedreceive(FAR struct file *mq, FAR
char *msg,
size_t msglen, FAR unsigned int *prio,
FAR const struct timespec *abstime)
{
- FAR struct inode *inode = mq->f_inode;
FAR struct tcb_s *rtcb = this_task();
FAR struct mqueue_inode_s *msgq;
FAR struct mqueue_msg_s *mqmsg;
irqstate_t flags;
int ret;
- if (!inode)
- {
- return -EBADF;
- }
-
- msgq = inode->i_private;
-
DEBUGASSERT(up_interrupt_context() == false);
/* Verify the input parameters and, in case of an error, set
* errno appropriately.
*/
- ret = nxmq_verify_receive(msgq, mq->f_oflags, msg, msglen);
+ ret = nxmq_verify_receive(mq, msg, msglen);
if (ret < 0)
{
return ret;
@@ -169,6 +161,8 @@ ssize_t file_mq_timedreceive(FAR struct file *mq, FAR char
*msg,
return -EINVAL;
}
+ msgq = mq->f_inode->i_private;
+
/* Furthermore, nxmq_wait_receive() expects to have interrupts disabled
* because messages can be sent from interrupt level.
*/
diff --git a/sched/mqueue/mq_timedsend.c b/sched/mqueue/mq_timedsend.c
index 2d9003f613..9db57621c8 100644
--- a/sched/mqueue/mq_timedsend.c
+++ b/sched/mqueue/mq_timedsend.c
@@ -146,7 +146,6 @@ int file_mq_timedsend(FAR struct file *mq, FAR const char
*msg,
size_t msglen, unsigned int prio,
FAR const struct timespec *abstime)
{
- FAR struct inode *inode = mq->f_inode;
FAR struct tcb_s *rtcb = this_task();
FAR struct mqueue_inode_s *msgq;
FAR struct mqueue_msg_s *mqmsg;
@@ -154,23 +153,18 @@ int file_mq_timedsend(FAR struct file *mq, FAR const char
*msg,
sclock_t ticks;
int ret;
- if (!inode)
- {
- return -EBADF;
- }
-
- msgq = inode->i_private;
-
DEBUGASSERT(up_interrupt_context() == false);
/* Verify the input parameters on any failures to verify. */
- ret = nxmq_verify_send(msgq, mq->f_oflags, msg, msglen, prio);
+ ret = nxmq_verify_send(mq, msg, msglen, prio);
if (ret < 0)
{
return ret;
}
+ msgq = mq->f_inode->i_private;
+
/* Disable interruption */
flags = enter_critical_section();
diff --git a/sched/mqueue/mqueue.h b/sched/mqueue/mqueue.h
index 0d9aef1d07..ab28437fb2 100644
--- a/sched/mqueue/mqueue.h
+++ b/sched/mqueue/mqueue.h
@@ -115,8 +115,11 @@ void nxmq_wait_irq(FAR struct tcb_s *wtcb, int errcode);
/* mq_rcvinternal.c
*************************************************************/
-int nxmq_verify_receive(FAR struct mqueue_inode_s *msgq,
- int oflags, FAR char *msg, size_t msglen);
+#ifdef CONFIG_DEBUG_FEATURES
+int nxmq_verify_receive(FAR struct file *mq, FAR char *msg, size_t msglen);
+#else
+# define nxmq_verify_receive(msgq, msg, msglen) OK
+#endif
int nxmq_wait_receive(FAR struct mqueue_inode_s *msgq,
int oflags, FAR struct mqueue_msg_s **rcvmsg);
ssize_t nxmq_do_receive(FAR struct mqueue_inode_s *msgq,
@@ -125,8 +128,12 @@ ssize_t nxmq_do_receive(FAR struct mqueue_inode_s *msgq,
/* mq_sndinternal.c
*************************************************************/
-int nxmq_verify_send(FAR struct mqueue_inode_s *msgq, int oflags,
- FAR const char *msg, size_t msglen, unsigned int prio);
+#ifdef CONFIG_DEBUG_FEATURES
+int nxmq_verify_send(FAR struct file *mq, FAR const char *msg,
+ size_t msglen, unsigned int prio);
+#else
+# define nxmq_verify_send(mq, msg, msglen, prio) OK
+#endif
FAR struct mqueue_msg_s *nxmq_alloc_msg(void);
int nxmq_wait_send(FAR struct mqueue_inode_s *msgq, int oflags);
int nxmq_do_send(FAR struct mqueue_inode_s *msgq,