blob: 6a39ce96adad26bc0fa925f5f9b34f8f12a0bd96 [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
8#include <base/files/scoped_file.h>
9#include <base/message_loop/message_loop.h>
10#include <brillo/daemons/daemon.h>
11
Ben Chan31206112017-12-18 17:38:08 -080012#include "imageloader/ipc.pb.h"
Ben Chan045849f2017-12-18 17:27:07 -080013#include "imageloader/verity_mounter.h"
Greg Kerr9944e242017-01-26 15:09:31 -080014
15using MessageLoopForIO = base::MessageLoopForIO;
16
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.
Greg Kerr11eddb12018-02-16 15:58:13 -080023class HelperProcessReceiver : public brillo::Daemon,
24 public base::MessageLoopForIO::Watcher {
Greg Kerr9944e242017-01-26 15:09:31 -080025 public:
Greg Kerr11eddb12018-02-16 15:58:13 -080026 explicit HelperProcessReceiver(base::ScopedFD control_fd);
Greg Kerr9944e242017-01-26 15:09:31 -080027
Xiaochu Liu61647282018-11-08 10:31:08 -080028 // Helper function defined in helper_process_receiver_fuzzer.cc.
Xiaochu Liu7a3509a2019-08-06 14:34:51 -070029 friend void helper_process_receiver_fuzzer_run(const char*, size_t);
Xiaochu Liu61647282018-11-08 10:31:08 -080030
Greg Kerr9944e242017-01-26 15:09:31 -080031 protected:
Greg Kerr09f06de2018-02-16 15:32:07 -080032 // Overrides Daemon init callback.
Greg Kerr9944e242017-01-26 15:09:31 -080033 int OnInit() override;
34
35 // Overrides MessageLoopForIO callbacks for new data on |control_fd_|.
36 void OnFileCanReadWithoutBlocking(int fd) override;
37 void OnFileCanWriteWithoutBlocking(int fd) override {}
38
39 private:
Ben Chan2ee68072017-12-18 17:49:41 -080040 CommandResponse HandleCommand(const ImageCommand& image_command,
Xiaochu Liu5e708b82017-11-13 13:59:12 -080041 struct cmsghdr* cmsg);
Ben Chan2ee68072017-12-18 17:49:41 -080042 void SendResponse(const CommandResponse& response);
Greg Kerr9944e242017-01-26 15:09:31 -080043
44 base::ScopedFD control_fd_;
45 MessageLoopForIO::FileDescriptorWatcher control_watcher_;
46 int pending_fd_;
47 VerityMounter mounter_;
48
Greg Kerr11eddb12018-02-16 15:58:13 -080049 DISALLOW_COPY_AND_ASSIGN(HelperProcessReceiver);
Greg Kerr9944e242017-01-26 15:09:31 -080050};
51
52} // namespace imageloader
53
Greg Kerr11eddb12018-02-16 15:58:13 -080054#endif // IMAGELOADER_HELPER_PROCESS_RECEIVER_H_