[CRIU] [PATCH v5 0/4] c/r of file leases
Andrei Vagin
avagin at virtuozzo.com
Thu Feb 8 20:56:20 MSK 2018
Pavel, could you take a look at this coverity issue?
611static int restore_file_lock(FileLockEntry *fle)
612{
613 int ret = -1;
614 unsigned int cmd;
615
1. Condition fle->flag & 2, taking false branch.
616 if (fle->flag & FL_FLOCK) {
617 if (fle->type & LOCK_MAND) {
618 cmd = fle->type;
619 } else if (fle->type == F_RDLCK) {
620 cmd = LOCK_SH;
621 } else if (fle->type == F_WRLCK) {
622 cmd = LOCK_EX;
623 } else if (fle->type == F_UNLCK) {
624 cmd = LOCK_UN;
625 } else {
626 pr_err("Unknown flock type!\n");
627 goto err;
628 }
629
630 pr_info("(flock)flag: %d, type: %d, cmd: %d, pid: %d, fd: %d\n",
631 fle->flag, fle->type, cmd, fle->pid, fle->fd);
632
633 ret = flock(fle->fd, cmd);
634 if (ret < 0) {
635 pr_err("Can not set flock!\n");
636 goto err;
637 }
2. Condition fle->flag & 1, taking false branch.
638 } else if (fle->flag & FL_POSIX) {
639 struct flock flk;
640 memset(&flk, 0, sizeof(flk));
641
642 flk.l_whence = SEEK_SET;
643 flk.l_start = fle->start;
644 flk.l_len = fle->len;
645 flk.l_pid = fle->pid;
646 flk.l_type = fle->type;
647
648 pr_info("(posix)flag: %d, type: %d, pid: %d, fd: %d, "
649 "start: %8"PRIx64", len: %8"PRIx64"\n",
650 fle->flag, fle->type, fle->pid, fle->fd,
651 fle->start, fle->len);
652
653 ret = fcntl(fle->fd, F_SETLKW, &flk);
654 if (ret < 0) {
655 pr_err("Can not set posix lock!\n");
656 goto err;
657 }
3. Condition fle->flag & 4, taking false branch.
658 } else if (fle->flag & FL_OFD) {
659 struct flock flk = {
660 .l_whence = SEEK_SET,
661 .l_start = fle->start,
662 .l_len = fle->len,
663 .l_pid = 0,
664 .l_type = fle->type
665 };
666
667 pr_info("(ofd)flag: %d, type: %d, pid: %d, fd: %d, "
668 "start: %8"PRIx64", len: %8"PRIx64"\n",
669 fle->flag, fle->type, fle->pid, fle->fd,
670 fle->start, fle->len);
671
672 ret = fcntl(fle->fd, F_OFD_SETLK, &flk);
673 if (ret < 0) {
674 pr_err("Can not set ofd lock!\n");
675 goto err;
676 }
4. Condition fle->flag & 8, taking true branch.
677 } else if (fle->flag & FL_LEASE) {
678 pr_info("(lease)flag: %d, type: %d, pid: %d, fd: %d, "
679 "start: %8"PRIx64", len: %8"PRIx64"\n",
680 fle->flag, fle->type, fle->pid, fle->fd,
681 fle->start, fle->len);
5. open_fn: Returning handle opened by restore_file_lease. [show details]
6. var_assign: Assigning: ret = handle returned from restore_file_lease(fle).
682 ret = restore_file_lease(fle);
7. Condition ret < 0, taking false branch.
683 if (ret < 0)
684 goto err;
8. Falling through to end of if statement.
685 } else {
686 pr_err("Unknown file lock style!\n");
687 goto err;
688 }
689
CID 185303 (#1 of 1): Resource leak (RESOURCE_LEAK)
9. leaked_handle: Handle variable ret going out of scope leaks the handle.
690 return 0;
691err:
692 return ret;
693}
On Mon, Oct 02, 2017 at 11:48:16PM +0300, Pavel Begunkov wrote:
> The patchset adds full support of file leases:
> - procfs parsing changes
> - restoring of file leases. In case of broken leases it breaks
> established lease with open syscall.
> - workaround inane 'broken lease type' (always 'READ') in procfs.
> - logic to support missing info about leases in proc/fd (v4.0 or older)
> - zdtm tests
>
> Pavel Begunkov (4):
> locks: Add c/r of non broken leases (kernel>=v4.1)
> locks: Add c/r of breaking leases (kernel>=v4.1)
> locks: Add leases c/r for kernels v4.0 and older
> zdtm: Add file lease tests
>
> criu/file-lock.c | 275 +++++++++++++++++++++++++++++++++++++
> criu/files.c | 3 +
> criu/include/file-lock.h | 7 +
> criu/proc_parse.c | 8 ++
> test/zdtm/static/Makefile | 4 +
> test/zdtm/static/file_lease00.c | 84 +++++++++++
> test/zdtm/static/file_lease00.desc | 1 +
> test/zdtm/static/file_lease01.c | 88 ++++++++++++
> test/zdtm/static/file_lease01.desc | 1 +
> test/zdtm/static/file_lease02.c | 145 +++++++++++++++++++
> test/zdtm/static/file_lease02.desc | 1 +
> test/zdtm/static/file_lease03.c | 145 +++++++++++++++++++
> test/zdtm/static/file_lease03.desc | 1 +
> 13 files changed, 763 insertions(+)
> create mode 100644 test/zdtm/static/file_lease00.c
> create mode 100644 test/zdtm/static/file_lease00.desc
> create mode 100644 test/zdtm/static/file_lease01.c
> create mode 120000 test/zdtm/static/file_lease01.desc
> create mode 100644 test/zdtm/static/file_lease02.c
> create mode 120000 test/zdtm/static/file_lease02.desc
> create mode 100644 test/zdtm/static/file_lease03.c
> create mode 120000 test/zdtm/static/file_lease03.desc
>
> --
> 2.14.1.473.g3ec7d702a8
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list