blob: 0162ef488d414d66dee5a5137a77447327c5de32 [file] [log] [blame]
Greg Kerr9944e242017-01-26 15:09:31 -08001// Copyright 2017 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Greg Kerr11eddb12018-02-16 15:58:13 -08005#ifndef IMAGELOADER_HELPER_PROCESS_RECEIVER_H_
6#define IMAGELOADER_HELPER_PROCESS_RECEIVER_H_
Greg Kerr9944e242017-01-26 15:09:31 -08007
Hidehiko Abe0deb0542019-08-15 01:56:10 +09008#include <memory>
9
10#include <base/files/file_descriptor_watcher_posix.h>
Greg Kerr9944e242017-01-26 15:09:31 -080011#include <base/files/scoped_file.h>
Greg Kerr9944e242017-01-26 15:09:31 -080012#include <brillo/daemons/daemon.h>
13
Ben Chan31206112017-12-18 17:38:08 -080014#include "imageloader/ipc.pb.h"
Ben Chan045849f2017-12-18 17:27:07 -080015#include "imageloader/verity_mounter.h"
Greg Kerr9944e242017-01-26 15:09:31 -080016
Xiaochu Liu5e708b82017-11-13 13:59:12 -080017struct cmsghdr;
18
Greg Kerr9944e242017-01-26 15:09:31 -080019namespace imageloader {
20
21// Main loop for the Mount helper process.
22// This object is used in the subprocess.
Hidehiko Abe0deb0542019-08-15 01:56:10 +090023class HelperProcessReceiver : public brillo::Daemon {
Greg Kerr9944e242017-01-26 15:09:31 -080024 public:
Greg Kerr11eddb12018-02-16 15:58:13 -080025 explicit HelperProcessReceiver(base::ScopedFD control_fd);
Qijiang Fan6bc59e12020-11-11 02:51:06 +090026 HelperProcessReceiver(const HelperProcessReceiver&) = delete;
27 HelperProcessReceiver& operator=(const HelperProcessReceiver&) = delete;
Greg Kerr9944e242017-01-26 15:09:31 -080028
Xiaochu Liu61647282018-11-08 10:31:08 -080029 // Helper function defined in helper_process_receiver_fuzzer.cc.
Xiaochu Liu7a3509a2019-08-06 14:34:51 -070030 friend void helper_process_receiver_fuzzer_run(const char*, size_t);
Xiaochu Liu61647282018-11-08 10:31:08 -080031
Greg Kerr9944e242017-01-26 15:09:31 -080032 protected:
Greg Kerr09f06de2018-02-16 15:32:07 -080033 // Overrides Daemon init callback.
Greg Kerr9944e242017-01-26 15:09:31 -080034 int OnInit() override;
35
Greg Kerr9944e242017-01-26 15:09:31 -080036 private:
Hidehiko Abe0deb0542019-08-15 01:56:10 +090037 void OnCommandReady();
Ben Chan2ee68072017-12-18 17:49:41 -080038 CommandResponse HandleCommand(const ImageCommand& image_command,
Xiaochu Liu5e708b82017-11-13 13:59:12 -080039 struct cmsghdr* cmsg);
Ben Chan2ee68072017-12-18 17:49:41 -080040 void SendResponse(const CommandResponse& response);
Greg Kerr9944e242017-01-26 15:09:31 -080041
42 base::ScopedFD control_fd_;
Hidehiko Abe0deb0542019-08-15 01:56:10 +090043 std::unique_ptr<base::FileDescriptorWatcher::Controller> controller_;
Greg Kerr9944e242017-01-26 15:09:31 -080044 int pending_fd_;
45 VerityMounter mounter_;
Greg Kerr9944e242017-01-26 15:09:31 -080046};
47
48} // namespace imageloader
49
Greg Kerr11eddb12018-02-16 15:58:13 -080050#endif // IMAGELOADER_HELPER_PROCESS_RECEIVER_H_