Compare commits

...

12 Commits

Author SHA1 Message Date
openharmony_ci 8faf909bf7 !434 fix: 修复lwip2.0 增强在futex中异常挂死问题
Merge pull request !434 from zhushengle/cherry-pick-1626314308
2021-07-21 02:20:14 +00:00
zhushengle 7ab0e7d690 fixed 1157c4a from https://gitee.com/zhushengle/kernel_liteos_a/pulls/427
fix : futex requeue机制中,头节点的queueList 为NULL, 导致系统异常

    queuelist中的普通节点在调整为futexList的节点时,
未校验其queueList的有效性,导致queueList未初始化,
出现访问空指针;且在从旧链表迁移节点到新链表时,
节点从旧链表删除之后又插入到另一个链表中,导致对
旧链表的为NULL判断出错。

Close #I4024F

Change-Id: I506a10fc5740ce16e682c2c419b9d92a82000b86
Signed-off-by: zhushengle <zhushengle@huawei.com>
2021-07-15 09:58:28 +08:00
openharmony_ci bc6eee70d8 !390 add vibrator liteos defined
Merge pull request !390 from kevin/0701_beta
2021-07-05 12:30:31 +00:00
kevin 088b02056a Merge branch '0701_beta' of https://gitee.com/Kevin-Lau/kernel_liteos_a into 0701_beta 2021-07-05 15:06:11 +08:00
kevin 47935660fd feat:add hdf vibrator liteos definition
Signed-off-by: kevin <liufeihu@huawei.com>
Change-Id: If610a1ccef9e02cbd99a8f770b7e252f2047cb0c
2021-07-05 15:05:12 +08:00
kevin 962353c192 add vibrator liteos defined
Signed-off-by: kevin <liufeihu@huawei.com>
Change-Id: If610a1ccef9e02cbd99a8f770b7e252f2047cb0c
2021-07-01 16:55:39 +08:00
openharmony_ci 9e0a2f9ca7 !383 fix: 修复kill进程时,liteipc阻塞的进程无法退出问题
Merge pull request !383 from zhushengle/cherry-pick-1624957891
2021-06-29 11:15:59 +00:00
zhushengle 051d985af0 fixed 7de43bb from https://gitee.com/zhushengle/kernel_liteos_a/pulls/371
fix: 修复kill进程时,因liteipc阻塞的进程概率无法退出问题

 kill进程时,会将因为liteipc阻塞的线程唤醒,使其调度并自动退出,由于liteipc阻塞机制为
循环阻塞方式,会导致将因liteipc阻塞的线程唤醒后又进入等待中。此处在唤醒因liteipc阻塞的
线程后检查是否已有kill标志,如果有使其按接收数据失败退出,在返回用户态之前,该线程会进
入退出流程,结束运行。

Close #I3XX7K

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: Iec4e298dff4aefd2994289067a35cb5673e323f9
2021-06-29 17:11:32 +08:00
openharmony_ci e6794a4026 !373 SIOCGIFCONF iotcl,用户态到内核态申请内存大小错误
Merge pull request !373 from 刘建东/cherry-pick-1624692993
2021-06-28 08:07:27 +00:00
YOUR_NAME 4496e71356 fixed bfd27e7 from https://gitee.com/life-liu/kernel_liteos_a/pulls/355
fix: SIOCGIFCONF ioctl malloc size error in kernel

use struct ifconf and ifc_buf size malloc memory

close: #I3XEZ3

Signed-off-by: liujiandong <liujiandong1@huawei.com>
2021-06-26 15:36:34 +08:00
openharmony_ci e278c9a7ae !353 修改lwip_enhanced编译脚本,更新lwip_enhanced lwip版本到2.1.2
Merge pull request !353 from 刘建东/OpenHarmony-v2.2-Beta
2021-06-22 13:40:45 +00:00
YOUR_NAME 83a3c291f2 chore: update lwip_enhanced lwip version to 2.1.2
update lwip version to 2.1.2 for lwip_enhanced

close: #I3X7PK

Signed-off-by: liujiandong <liujiandong1@huawei.com>
2021-06-22 20:12:12 +08:00
9 changed files with 95 additions and 12 deletions

View File

@ -470,6 +470,15 @@ STATIC INLINE BOOL OsTaskIsPending(const LosTaskCB *taskCB)
return FALSE; return FALSE;
} }
STATIC INLINE BOOL OsTaskIsKilled(const LosTaskCB *taskCB)
{
if (taskCB->taskStatus & OS_TASK_FLAG_EXIT_KILL) {
return TRUE;
}
return FALSE;
}
#define OS_TID_CHECK_INVALID(taskID) ((UINT32)(taskID) >= g_taskMaxNum) #define OS_TID_CHECK_INVALID(taskID) ((UINT32)(taskID) >= g_taskMaxNum)
/* get task info */ /* get task info */

View File

@ -199,6 +199,9 @@ STATIC INLINE VOID OsFutexReplaceQueueListHeadNode(FutexNode *oldHeadNode, Futex
LOS_DL_LIST *futexList = oldHeadNode->futexList.pstPrev; LOS_DL_LIST *futexList = oldHeadNode->futexList.pstPrev;
LOS_ListDelete(&oldHeadNode->futexList); LOS_ListDelete(&oldHeadNode->futexList);
LOS_ListHeadInsert(futexList, &newHeadNode->futexList); LOS_ListHeadInsert(futexList, &newHeadNode->futexList);
if ((newHeadNode->queueList.pstNext == NULL) || (newHeadNode->queueList.pstPrev == NULL)) {
LOS_ListInit(&newHeadNode->queueList);
}
} }
STATIC INLINE VOID OsFutexDeleteKeyFromFutexList(FutexNode *node) STATIC INLINE VOID OsFutexDeleteKeyFromFutexList(FutexNode *node)
@ -323,7 +326,6 @@ STATIC VOID OsFutexInsertNewFutexKeyToHash(FutexNode *node)
LOS_ListTailInsert(&(headNode->futexList), &(node->futexList)); LOS_ListTailInsert(&(headNode->futexList), &(node->futexList));
break; break;
} }
} }
EXIT: EXIT:
@ -797,6 +799,7 @@ EXIT_UNLOCK_ERR:
STATIC INT32 OsFutexRequeueInsertNewKey(UINTPTR newFutexKey, INT32 newIndex, FutexNode *oldHeadNode) STATIC INT32 OsFutexRequeueInsertNewKey(UINTPTR newFutexKey, INT32 newIndex, FutexNode *oldHeadNode)
{ {
BOOL queueListIsEmpty = FALSE;
INT32 ret; INT32 ret;
UINT32 intSave; UINT32 intSave;
LosTaskCB *task = NULL; LosTaskCB *task = NULL;
@ -817,25 +820,33 @@ STATIC INT32 OsFutexRequeueInsertNewKey(UINTPTR newFutexKey, INT32 newIndex, Fut
nextNode = OS_FUTEX_FROM_QUEUELIST(queueList); nextNode = OS_FUTEX_FROM_QUEUELIST(queueList);
SCHEDULER_LOCK(intSave); SCHEDULER_LOCK(intSave);
if (LOS_ListEmpty(&nextNode->pendList)) { if (LOS_ListEmpty(&nextNode->pendList)) {
if (LOS_ListEmpty(queueList)) {
queueListIsEmpty = TRUE;
} else {
queueList = queueList->pstNext; queueList = queueList->pstNext;
}
OsFutexDeinitFutexNode(nextNode); OsFutexDeinitFutexNode(nextNode);
SCHEDULER_UNLOCK(intSave); SCHEDULER_UNLOCK(intSave);
if (queueList->pstNext != NULL) { if (queueListIsEmpty) {
continue;
} else {
return LOS_OK; return LOS_OK;
} }
continue;
} }
task = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&(nextNode->pendList))); task = OS_TCB_FROM_PENDLIST(LOS_DL_LIST_FIRST(&(nextNode->pendList)));
if (LOS_ListEmpty(queueList)) {
queueListIsEmpty = TRUE;
} else {
queueList = queueList->pstNext; queueList = queueList->pstNext;
}
LOS_ListDelete(&nextNode->queueList); LOS_ListDelete(&nextNode->queueList);
ret = OsFutexInsertTasktoPendList(&newHeadNode, nextNode, task); ret = OsFutexInsertTasktoPendList(&newHeadNode, nextNode, task);
SCHEDULER_UNLOCK(intSave); SCHEDULER_UNLOCK(intSave);
if (ret != LOS_OK) { if (ret != LOS_OK) {
PRINT_ERR("Futex requeue insert new key failed!\n"); PRINT_ERR("Futex requeue insert new key failed!\n");
} }
} while (queueList->pstNext != NULL); } while (!queueListIsEmpty);
return LOS_OK; return LOS_OK;
} }

View File

@ -108,6 +108,7 @@ typedef enum {
READ, READ,
READ_DROP, READ_DROP,
READ_TIMEOUT, READ_TIMEOUT,
KILL,
OPERATION_NUM OPERATION_NUM
} IpcOpertion; } IpcOpertion;
@ -1099,6 +1100,14 @@ LITE_OS_SEC_TEXT STATIC UINT32 LiteIpcRead(IpcContent *content)
return -ETIME; return -ETIME;
} }
if (OsTaskIsKilled(tcb)) {
#if (LOSCFG_KERNEL_TRACE == YES)
IpcTrace(NULL, KILL, tcb->ipcStatus, syncFlag ? MT_REPLY : MT_REQUEST);
#endif
SCHEDULER_UNLOCK(intSave);
return -ERFKILL;
}
SCHEDULER_UNLOCK(intSave); SCHEDULER_UNLOCK(intSave);
} else { } else {
listNode = LOS_DL_LIST_FIRST(listHead); listNode = LOS_DL_LIST_FIRST(listHead);
@ -1178,7 +1187,7 @@ BUFFER_FREE:
if ((content->flag & RECV) == RECV) { if ((content->flag & RECV) == RECV) {
ret = LiteIpcRead(content); ret = LiteIpcRead(content);
if (ret != LOS_OK) { if (ret != LOS_OK) {
PRINT_ERR("LiteIpcRead failed\n"); PRINT_ERR("LiteIpcRead failed ERROR: %d\n", (INT32)ret);
return ret; return ret;
} }
UINT32 offset = LOS_OFF_SET_OF(IpcContent, inMsg); UINT32 offset = LOS_OFF_SET_OF(IpcContent, inMsg);

View File

@ -1468,6 +1468,51 @@ static err_t lwip_do_ioctl_impl(struct tcpip_api_call_data *call)
#include "los_vm_map.h" #include "los_vm_map.h"
#include "user_copy.h" #include "user_copy.h"
static int do_ioctl_SIOCGIFCONF(int sockfd, long cmd, void *argp)
{
int nbytes;
struct ifconf ifc;
char *buf_bak = NULL;
int ret;
if (LOS_ArchCopyFromUser(&ifc, argp, sizeof(struct ifconf)) != 0) {
set_errno(EFAULT);
return -1;
}
nbytes = ifc.ifc_len;
if (nbytes < 0) {
set_errno(EINVAL);
return -1;
}
buf_bak = ifc.ifc_buf;
if (!LOS_IsUserAddress((VADDR_T)(uintptr_t)buf_bak)) {
set_errno(EFAULT);
return -1;
}
ifc.ifc_buf = malloc(nbytes);
if (ifc.ifc_buf == NULL) {
set_errno(ENOMEM);
return -1;
}
(void)memset_s(ifc.ifc_buf, nbytes, 0, nbytes);
ret = lwip_ioctl(sockfd, cmd, &ifc);
if (ret == 0) {
if (LOS_ArchCopyToUser(buf_bak, ifc.ifc_buf, nbytes) != 0) {
set_errno(EFAULT);
ret = -1;
}
}
free(ifc.ifc_buf);
ifc.ifc_buf = buf_bak;
if (LOS_ArchCopyToUser(argp, &ifc, sizeof(struct ifconf)) != 0) {
set_errno(EFAULT);
ret = -1;
}
return ret;
}
int socks_ioctl(int sockfd, long cmd, void *argp) int socks_ioctl(int sockfd, long cmd, void *argp)
{ {
void *argpbak = argp; void *argpbak = argp;
@ -1483,11 +1528,12 @@ int socks_ioctl(int sockfd, long cmd, void *argp)
case SIOCADDRT: case SIOCADDRT:
nbytes = sizeof(struct rtentry); nbytes = sizeof(struct rtentry);
break; break;
case SIOCGIFCONF:
return do_ioctl_SIOCGIFCONF(sockfd, cmd, argp);
case SIOCSIPV6DAD: case SIOCSIPV6DAD:
case SIOCGIPV6DAD: case SIOCGIPV6DAD:
case SIOCSIPV6DPCTD: case SIOCSIPV6DPCTD:
case SIOCGIPV6DPCTD: case SIOCGIPV6DPCTD:
case SIOCGIFCONF:
case SIOCGIFADDR: case SIOCGIFADDR:
case SIOCSIFADDR: case SIOCSIFADDR:
case SIOCDIFADDR: case SIOCDIFADDR:

View File

@ -40,6 +40,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
LOSCFG_DRIVERS_HDF_SENSOR=y LOSCFG_DRIVERS_HDF_SENSOR=y
LOSCFG_DRIVERS_HDF_STORAGE=y LOSCFG_DRIVERS_HDF_STORAGE=y
LOSCFG_DRIVERS_HDF_VIBRATOR=y
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
LOSCFG_DRIVERS_SD=y LOSCFG_DRIVERS_SD=y
LOSCFG_DRIVERS_EMMC=y LOSCFG_DRIVERS_EMMC=y
LOSCFG_DRIVERS_HIEVENT=y LOSCFG_DRIVERS_HIEVENT=y

View File

@ -40,6 +40,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
LOSCFG_DRIVERS_HDF_SENSOR=y LOSCFG_DRIVERS_HDF_SENSOR=y
LOSCFG_DRIVERS_HDF_STORAGE=y LOSCFG_DRIVERS_HDF_STORAGE=y
LOSCFG_DRIVERS_HDF_VIBRATOR=y
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
LOSCFG_DRIVERS_SD=y LOSCFG_DRIVERS_SD=y
LOSCFG_DRIVERS_EMMC=y LOSCFG_DRIVERS_EMMC=y
LOSCFG_DRIVERS_TZDRIVER=y LOSCFG_DRIVERS_TZDRIVER=y

View File

@ -37,6 +37,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
LOSCFG_DRIVERS_HDF_SENSOR=y LOSCFG_DRIVERS_HDF_SENSOR=y
LOSCFG_DRIVERS_HDF_STORAGE=y LOSCFG_DRIVERS_HDF_STORAGE=y
LOSCFG_DRIVERS_HDF_VIBRATOR=y
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
LOSCFG_DRIVERS_SD=y LOSCFG_DRIVERS_SD=y
LOSCFG_DRIVERS_EMMC=y LOSCFG_DRIVERS_EMMC=y
LOSCFG_DRIVERS_HIEVENT=y LOSCFG_DRIVERS_HIEVENT=y

View File

@ -38,6 +38,8 @@ LOSCFG_DRIVERS_HDF_INPUT=y
LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y LOSCFG_DRIVERS_HDF_TP_5P5_GT911=y
LOSCFG_DRIVERS_HDF_SENSOR=y LOSCFG_DRIVERS_HDF_SENSOR=y
LOSCFG_DRIVERS_HDF_STORAGE=y LOSCFG_DRIVERS_HDF_STORAGE=y
LOSCFG_DRIVERS_HDF_VIBRATOR=y
LOSCFG_DRIVERS_HDF_VIBRATOR_LINEAR=y
LOSCFG_DRIVERS_SD=y LOSCFG_DRIVERS_SD=y
LOSCFG_DRIVERS_EMMC=y LOSCFG_DRIVERS_EMMC=y
LOSCFG_DRIVERS_TZDRIVER=y LOSCFG_DRIVERS_TZDRIVER=y

View File

@ -365,13 +365,13 @@ ifeq ($(LOSCFG_NET_LWIP_SACK_2_1), y)
LITEOS_CMACRO += $(LWIP_MACROS) LITEOS_CMACRO += $(LWIP_MACROS)
else ifeq ($(LOSCFG_NET_LWIP_SACK_2_0), y) else ifeq ($(LOSCFG_NET_LWIP_SACK_2_0), y)
LWIPDIR := $(LITEOSTHIRDPARTY)/lwip_enhanced LWIPDIR := $(LITEOSTHIRDPARTY)/lwip_enhanced/src
LITEOS_BASELIB += -llwip LITEOS_BASELIB += -llwip
LIB_SUBDIRS += $(LWIPDIR) LIB_SUBDIRS += $(LWIPDIR)
LITEOS_LWIP_SACK_INCLUDE += \ LITEOS_LWIP_SACK_INCLUDE += \
-I $(LWIPDIR)/include \ -I $(LWIPDIR)/include \
-I $(LITEOSTOPDIR)/net/mac -I $(LITEOSTOPDIR)/net/mac
LWIP_MACROS += -DLWIP_CONFIG_FILE=\"lwip/lwipopts.h\" LWIP_MACROS += -DLWIP_CONFIG_FILE=\"lwip/lwipopts.h\" -DLWIP_LITEOS_A_COMPAT
LITEOS_CMACRO += $(LWIP_MACROS) LITEOS_CMACRO += $(LWIP_MACROS)
else else
$(error "unknown lwip version") $(error "unknown lwip version")