fixup: pty: possible memory leaking on close()

The ref_count of the vnode is NOT bound to the resource reference counts
of the ptm device created by opening `dev/ptmx`, so the conditional
release of resource may end up by memory leaking if the multiple user
have open the `dev/ptmx`.

Changes:

- Removed conditional branch on recycling resource

Signed-off-by: Shell <smokewood@qq.com>
This commit is contained in:
Shell 2024-09-19 15:06:03 +08:00 committed by Meco Man
parent 87906499a3
commit 210cd71128
1 changed files with 3 additions and 11 deletions

View File

@ -27,7 +27,6 @@ static int ptm_fops_open(struct dfs_file *file)
rt_uint32_t oflags = file->flags; rt_uint32_t oflags = file->flags;
rt_thread_t cur_thr = rt_thread_self(); rt_thread_t cur_thr = rt_thread_self();
/* we don't check refcnt because each open will create a new device */
if (file->vnode && file->vnode->data) if (file->vnode && file->vnode->data)
{ {
/** /**
@ -61,18 +60,11 @@ static int ptm_fops_close(struct dfs_file *file)
rt_device_t device; rt_device_t device;
if (file->data) if (file->data)
{
if (file->vnode->ref_count != 1)
{
rc = 0;
}
else
{ {
device = (rt_device_t)file->data; device = (rt_device_t)file->data;
tp = rt_container_of(device, struct lwp_tty, parent); tp = rt_container_of(device, struct lwp_tty, parent);
rc = bsd_ptsdev_methods.fo_close(tp, rt_thread_self()); rc = bsd_ptsdev_methods.fo_close(tp, rt_thread_self());
} }
}
else else
{ {
rc = -EINVAL; rc = -EINVAL;