#!/bin/bash
# @file      falcon-kernel-check
# @brief     Check if the host kernel supports CrowdStrike sensor.
#            Exit status:
#            0      if supported.
#            1      if not supported.
#            2      if error occurred.
# @version   14810
# @copyright CrowdStrike, Inc. CONFIDENTIAL AND PROPRIETARY
# @copyright CrowdStrike, Inc. Copyright (c) 2023. All rights reserved.

kernels="4.14.77-86.82.amzn2.aarch64\n4.14.88-88.73.amzn2.aarch64\n4.14.88-88.76.amzn2.aarch64\n4.14.94-89.73.amzn2.aarch64\n4.14.97-90.72.amzn2.aarch64\n4.14.101-91.76.amzn2.aarch64\n4.14.104-95.84.amzn2.aarch64\n4.14.106-97.85.amzn2.aarch64\n4.14.109-99.92.amzn2.aarch64\n4.14.114-103.97.amzn2.aarch64\n4.14.114-105.126.amzn2.aarch64\n4.14.121-109.96.amzn2.aarch64\n4.14.123-111.109.amzn2.aarch64\n4.14.128-112.105.amzn2.aarch64\n4.14.133-113.105.amzn2.aarch64\n4.14.133-113.112.amzn2.aarch64\n4.14.138-114.102.amzn2.aarch64\n4.14.143-118.123.amzn2.aarch64\n4.14.146-119.123.amzn2.aarch64\n4.14.146-120.181.amzn2.aarch64\n4.14.152-124.171.amzn2.aarch64\n4.14.152-127.182.amzn2.aarch64\n4.14.154-128.181.amzn2.aarch64\n4.14.158-129.185.amzn2.aarch64\n4.14.165-131.185.amzn2.aarch64\n4.14.165-133.209.amzn2.aarch64\n4.14.171-136.231.amzn2.aarch64\n4.14.173-137.228.amzn2.aarch64\n4.14.173-137.229.amzn2.aarch64\n4.14.177-139.253.amzn2.aarch64\n4.14.177-139.254.amzn2.aarch64\n4.14.181-140.257.amzn2.aarch64\n4.14.181-142.260.amzn2.aarch64\n4.14.186-146.268.amzn2.aarch64\n4.14.192-147.314.amzn2.aarch64\n4.14.193-149.317.amzn2.aarch64\n4.14.198-152.320.amzn2.aarch64\n4.14.200-155.322.amzn2.aarch64\n4.14.203-156.332.amzn2.aarch64\n4.14.209-160.335.amzn2.aarch64\n4.14.209-160.339.amzn2.aarch64\n4.14.214-160.339.amzn2.aarch64\n4.14.219-161.340.amzn2.aarch64\n4.14.219-164.354.amzn2.aarch64\n4.14.225-168.357.amzn2.aarch64\n4.14.225-169.362.amzn2.aarch64\n4.14.231-173.360.amzn2.aarch64\n4.14.231-173.361.amzn2.aarch64\n4.14.232-176.381.amzn2.aarch64\n4.14.232-177.418.amzn2.aarch64\n4.14.238-182.421.amzn2.aarch64\n4.14.238-182.422.amzn2.aarch64\n4.14.241-184.433.amzn2.aarch64\n4.14.243-185.433.amzn2.aarch64\n4.14.246-187.474.amzn2.aarch64\n4.14.248-189.473.amzn2.aarch64\n4.14.252-195.481.amzn2.aarch64\n4.14.252-195.483.amzn2.aarch64\n4.14.256-197.484.amzn2.aarch64\n4.14.262-200.489.amzn2.aarch64\n4.14.268-205.500.amzn2.aarch64\n4.14.273-207.502.amzn2.aarch64\n4.14.275-207.503.amzn2.aarch64\n4.14.276-211.499.amzn2.aarch64\n4.14.281-212.502.amzn2.aarch64\n4.14.285-215.501.amzn2.aarch64\n4.14.287-215.504.amzn2.aarch64\n4.14.290-217.505.amzn2.aarch64\n4.14.291-218.527.amzn2.aarch64\n4.14.294-220.533.amzn2.aarch64\n4.14.296-222.539.amzn2.aarch64\n4.14.299-223.520.amzn2.aarch64\n4.14.301-224.520.amzn2.aarch64\n4.14.301-225.528.amzn2.aarch64\n4.14.304-226.531.amzn2.aarch64\n4.18.0-348.el8.aarch64\n4.18.0-348.el8.0.2.aarch64\n4.18.0-348.2.1.el8_5.aarch64\n4.18.0-348.7.1.el8_5.aarch64\n4.18.0-348.12.2.el8_5.aarch64\n4.18.0-348.20.1.el8_5.aarch64\n4.18.0-348.23.1.el8_5.aarch64\n4.18.0-372.9.1.el8.aarch64\n4.18.0-372.13.1.el8_6.aarch64\n4.18.0-372.16.1.el8_6.aarch64\n4.18.0-372.16.1.el8_6.0.1.aarch64\n4.18.0-372.19.1.el8_6.aarch64\n4.18.0-372.26.1.el8_6.aarch64\n4.18.0-372.32.1.el8_6.aarch64\n4.18.0-372.36.1.el8_6.aarch64\n4.18.0-425.3.1.el8.aarch64\n4.18.0-425.10.1.el8_7.aarch64\n4.19.58-21.57.amzn2.aarch64\n4.19.58-21.64.amzn2.aarch64\n4.19.66-22.57.amzn2.aarch64\n4.19.72-25.58.amzn2.aarch64\n4.19.75-27.58.amzn2.aarch64\n4.19.75-28.73.amzn2.aarch64\n4.19.82-30.69.amzn2.aarch64\n4.19.84-33.70.amzn2.aarch64\n5.4.0-37-generic #41~18.04.1-Ubuntu SMP Mon Jun 8 13:38:40 UTC 2020\n5.4.0-39-generic #43~18.04.1-Ubuntu SMP Mon Jun 22 19:09:54 UTC 2020\n5.4.0-40-generic #44~18.04.1-Ubuntu SMP Wed Jun 24 23:09:21 UTC 2020\n5.4.0-42-generic #46~18.04.1-Ubuntu SMP Fri Jul 10 07:10:00 UTC 2020\n5.4.0-45-generic #49~18.04.2-Ubuntu SMP Wed Aug 26 18:59:35 UTC 2020\n5.4.0-47-generic #51~18.04.1-Ubuntu SMP Sat Sep 5 14:36:25 UTC 2020\n5.4.0-48-generic #52~18.04.1-Ubuntu SMP Thu Sep 10 12:54:16 UTC 2020\n5.4.0-51-generic #56~18.04.1-Ubuntu SMP Tue Oct 6 09:48:51 UTC 2020\n5.4.0-52-generic #57~18.04.1-Ubuntu SMP Thu Oct 15 14:00:33 UTC 2020\n5.4.0-53-generic #59~18.04.1-Ubuntu SMP Wed Oct 21 12:13:40 UTC 2020\n5.4.0-54-generic #60~18.04.1-Ubuntu SMP Fri Nov 6 17:25:33 UTC 2020\n5.4.0-58-generic #64~18.04.1-Ubuntu SMP Wed Dec 9 17:07:18 UTC 2020\n5.4.0-59-generic #65~18.04.1-Ubuntu SMP Mon Dec 14 15:56:44 UTC 2020\n5.4.0-60-generic #67~18.04.1-Ubuntu SMP Tue Jan 5 21:53:56 UTC 2021\n5.4.0-62-generic #70~18.04.1-Ubuntu SMP Tue Jan 12 17:18:40 UTC 2021\n5.4.0-64-generic #72~18.04.1-Ubuntu SMP Fri Jan 15 14:04:56 UTC 2021\n5.4.0-65-generic #73~18.04.1-Ubuntu SMP Tue Jan 19 09:05:37 UTC 2021\n5.4.0-66-generic #74~18.04.2-Ubuntu SMP Fri Feb 5 11:21:17 UTC 2021\n5.4.0-67-generic #75~18.04.1-Ubuntu SMP Tue Feb 23 19:15:33 UTC 2021\n5.4.0-70-generic #78~18.04.1-Ubuntu SMP Sat Mar 20 14:07:12 UTC 2021\n5.4.0-71-generic #79~18.04.1-Ubuntu SMP Thu Mar 25 05:46:17 UTC 2021\n5.4.0-72-generic #80~18.04.1-Ubuntu SMP Mon Apr 12 23:31:40 UTC 2021\n5.4.0-73-generic #82~18.04.1-Ubuntu SMP Fri Apr 16 15:08:12 UTC 2021\n5.4.0-74-generic #83~18.04.1-Ubuntu SMP Tue May 11 15:59:54 UTC 2021\n5.4.0-77-generic #86~18.04.1-Ubuntu SMP Fri Jun 18 01:23:33 UTC 2021\n5.4.0-80-generic #90~18.04.1-Ubuntu SMP Tue Jul 13 19:38:29 UTC 2021\n5.4.0-81-generic #91~18.04.1-Ubuntu SMP Fri Jul 23 13:36:05 UTC 2021\n5.4.0-84-generic #94~18.04.1-Ubuntu SMP Thu Aug 26 23:17:54 UTC 2021\n5.4.0-86-generic #97~18.04.1-Ubuntu SMP Sat Sep 18 03:09:29 UTC 2021\n5.4.0-87-generic #98~18.04.1-Ubuntu SMP Wed Sep 22 10:44:37 UTC 2021\n5.4.0-89-generic #100~18.04.1-Ubuntu SMP Wed Sep 29 10:44:44 UTC 2021\n5.4.0-90-generic #101~18.04.1-Ubuntu SMP Fri Oct 22 09:22:46 UTC 2021\n5.4.0-91-generic #102~18.04.1-Ubuntu SMP Thu Nov 11 14:49:27 UTC 2021\n5.4.0-92-generic #103~18.04.2-Ubuntu SMP Wed Dec 1 16:47:27 UTC 2021\n5.4.0-94-generic #106~18.04.1-Ubuntu SMP Fri Jan 7 07:26:18 UTC 2022\n5.4.0-96-generic #109~18.04.1-Ubuntu SMP Thu Jan 13 15:06:51 UTC 2022\n5.4.0-97-generic #110~18.04.1-Ubuntu SMP Mon Jan 17 20:53:31 UTC 2022\n5.4.0-99-generic #112~18.04.1-Ubuntu SMP Thu Feb 3 14:10:52 UTC 2022\n5.4.0-100-generic #113~18.04.1-Ubuntu SMP Mon Feb 7 15:04:06 UTC 2022\n5.4.0-104-generic #118~18.04.1-Ubuntu SMP Thu Mar 3 13:56:22 UTC 2022\n5.4.0-105-generic #119~18.04.1-Ubuntu SMP Tue Mar 8 11:23:33 UTC 2022\n5.4.0-107-generic #121~18.04.1-Ubuntu SMP Thu Mar 24 17:26:43 UTC 2022\n5.4.0-109-generic #123~18.04.1-Ubuntu SMP Fri Apr 8 09:52:08 UTC 2022\n5.4.0-110-generic #124~18.04.1-Ubuntu SMP Fri Apr 22 12:03:53 UTC 2022\n5.4.0-113-generic #127~18.04.1-Ubuntu SMP Wed May 18 15:42:19 UTC 2022\n5.4.0-117-generic #132~18.04.1-Ubuntu SMP Thu Jun 2 23:38:25 UTC 2022\n5.4.0-120-generic #136~18.04.1-Ubuntu SMP Fri Jun 10 18:03:31 UTC 2022\n5.4.0-121-generic #137~18.04.1-Ubuntu SMP Thu Jun 16 21:59:07 UTC 2022\n5.4.0-122-generic #138~18.04.1-Ubuntu SMP Fri Jun 24 14:17:33 UTC 2022\n5.4.0-124-generic #140~18.04.1-Ubuntu SMP Fri Aug 5 11:46:58 UTC 2022\n5.4.0-125-generic #141~18.04.1-Ubuntu SMP Thu Aug 11 22:43:05 UTC 2022\n5.4.0-126-generic #142~18.04.1-Ubuntu SMP Thu Sep 1 16:27:32 UTC 2022\n5.4.0-128-generic #144~18.04.1-Ubuntu SMP Thu Sep 22 11:10:00 UTC 2022\n5.4.0-131-generic #147~18.04.1-Ubuntu SMP Sat Oct 15 13:11:21 UTC 2022\n5.4.0-132-generic #148~18.04.1-Ubuntu SMP Mon Oct 24 20:41:23 UTC 2022\n5.4.0-135-generic #152~18.04.2-Ubuntu SMP Tue Nov 29 13:32:11 UTC 2022\n5.4.0-137-generic #154~18.04.1-Ubuntu SMP Tue Jan 10 16:58:27 UTC 2023\n5.4.0-1018-aws #18~18.04.1-Ubuntu SMP Sun Jun 28 03:15:45 UTC 2020\n5.4.0-1020-aws #20~18.04.2-Ubuntu SMP Tue Jul 14 05:42:18 UTC 2020\n5.4.0-1022-aws #22~18.04.1-Ubuntu SMP Wed Aug 19 10:20:05 UTC 2020\n5.4.0-1024-aws #24~18.04.1-Ubuntu SMP Sat Sep 5 15:58:13 UTC 2020\n5.4.0-1025-aws #25~18.04.1-Ubuntu SMP Fri Sep 11 20:29:55 UTC 2020\n5.4.0-1028-aws #29~18.04.1-Ubuntu SMP Tue Oct 6 17:16:50 UTC 2020\n5.4.0-1029-aws #30~18.04.1-Ubuntu SMP Tue Oct 20 11:08:38 UTC 2020\n5.4.0-1032-aws #33~18.04.1-Ubuntu SMP Thu Dec 10 08:17:11 UTC 2020\n5.4.0-1034-aws #35~18.04.1-Ubuntu SMP Fri Dec 18 01:07:47 UTC 2020\n5.4.0-1035-aws #37~18.04.1-Ubuntu SMP Wed Jan 6 22:31:50 UTC 2021\n5.4.0-1037-aws #39~18.04.1-Ubuntu SMP Fri Jan 15 02:51:15 UTC 2021\n5.4.0-1038-aws #40~18.04.1-Ubuntu SMP Sat Feb 6 02:02:56 UTC 2021\n5.4.0-1039-aws #41~18.04.1-Ubuntu SMP Fri Feb 26 11:22:12 UTC 2021\n5.4.0-1041-aws #43~18.04.1-Ubuntu SMP Sat Mar 20 15:39:30 UTC 2021\n5.4.0-1043-aws #45~18.04.1-Ubuntu SMP Fri Apr 9 23:32:55 UTC 2021\n5.4.0-1045-aws #47~18.04.1-Ubuntu SMP Tue Apr 13 16:00:48 UTC 2021\n5.4.0-1047-aws #49~18.04.1-Ubuntu SMP Thu Apr 29 03:05:56 UTC 2021\n5.4.0-1048-aws #50~18.04.1-Ubuntu SMP Tue May 4 17:36:47 UTC 2021\n5.4.0-1049-aws #51~18.04.1-Ubuntu SMP Fri May 14 18:33:01 UTC 2021\n5.4.0-1051-aws #53~18.04.1-Ubuntu SMP Fri Jun 18 14:54:27 UTC 2021\n5.4.0-1054-aws #57~18.04.1-Ubuntu SMP Thu Jul 15 03:17:42 UTC 2021\n5.4.0-1055-aws #58~18.04.1-Ubuntu SMP Wed Jul 28 03:04:21 UTC 2021\n5.4.0-1056-aws #59~18.04.1-Ubuntu SMP Mon Aug 23 23:07:27 UTC 2021\n5.4.0-1057-aws #60~18.04.1-Ubuntu SMP Thu Sep 9 20:34:39 UTC 2021\n5.4.0-1058-aws #61~18.04.3-Ubuntu SMP Fri Oct 1 14:05:02 UTC 2021\n5.4.0-1059-aws #62~18.04.1-Ubuntu SMP Fri Oct 22 21:45:43 UTC 2021\n5.4.0-1060-aws #63~18.04.1-Ubuntu SMP Mon Nov 15 14:29:33 UTC 2021\n5.4.0-1061-aws #64~18.04.1-Ubuntu SMP Fri Dec 3 17:52:37 UTC 2021\n5.4.0-1063-aws #66~18.04.1-Ubuntu SMP Thu Jan 13 19:49:24 UTC 2022\n5.4.0-1064-aws #67~18.04.1-Ubuntu SMP Mon Jan 17 16:43:03 UTC 2022\n5.4.0-1065-aws #68~18.04.1-Ubuntu SMP Thu Feb 3 17:13:36 UTC 2022\n5.4.0-1066-aws #69~18.04.1-Ubuntu SMP Wed Feb 9 15:39:21 UTC 2022\n5.4.0-1068-aws #72~18.04.1-Ubuntu SMP Thu Mar 3 08:50:36 UTC 2022\n5.4.0-1069-aws #73~18.04.1-Ubuntu SMP Mon Mar 14 18:50:16 UTC 2022\n5.4.0-1071-aws #76~18.04.1-Ubuntu SMP Mon Mar 28 17:55:55 UTC 2022\n5.4.0-1072-aws #77~18.04.1-Ubuntu SMP Thu Apr 7 21:41:14 UTC 2022\n5.4.0-1075-aws #80~18.04.1-Ubuntu SMP Mon May 23 20:42:29 UTC 2022\n5.4.0-1078-aws #84~18.04.1-Ubuntu SMP Fri Jun 3 13:00:45 UTC 2022\n5.4.0-1080-aws #87~18.04.1-Ubuntu SMP Fri Jun 10 18:34:59 UTC 2022\n5.4.0-1081-aws #88~18.04.1-Ubuntu SMP Thu Jun 23 16:39:47 UTC 2022\n5.4.0-1083-aws #90~18.04.1-Ubuntu SMP Fri Aug 5 08:15:25 UTC 2022\n5.4.0-1084-aws #91~18.04.1-Ubuntu SMP Sun Aug 14 01:27:17 UTC 2022\n5.4.0-1085-aws #92~18.04.1-Ubuntu SMP Wed Aug 31 17:24:47 UTC 2022\n5.4.0-1086-aws #93~18.04.1-Ubuntu SMP Fri Sep 23 17:21:27 UTC 2022\n5.4.0-1088-aws #96~18.04.1-Ubuntu SMP Mon Oct 17 02:57:42 UTC 2022\n5.4.0-1089-aws #97~18.04.1-Ubuntu SMP Fri Oct 28 19:10:07 UTC 2022\n5.4.0-1092-aws #100~18.04.2-Ubuntu SMP Tue Nov 29 13:42:54 UTC 2022\n5.4.0-1094-aws #102~18.04.1-Ubuntu SMP Tue Jan 10 21:08:25 UTC 2023\n5.4.20-12.75.amzn2.aarch64\n5.4.38-17.76.amzn2.aarch64\n5.4.46-19.75.amzn2.aarch64\n5.4.46-23.77.amzn2.aarch64\n5.4.50-25.83.amzn2.aarch64\n5.4.58-27.104.amzn2.aarch64\n5.4.58-32.125.amzn2.aarch64\n5.4.68-34.125.amzn2.aarch64\n5.4.74-36.135.amzn2.aarch64\n5.4.80-40.140.amzn2.aarch64\n5.4.91-41.139.amzn2.aarch64\n5.4.95-42.163.amzn2.aarch64\n5.4.105-48.177.amzn2.aarch64\n5.4.110-54.182.amzn2.aarch64\n5.4.110-54.189.amzn2.aarch64\n5.4.117-58.216.amzn2.aarch64\n5.4.129-62.227.amzn2.aarch64\n5.4.129-63.229.amzn2.aarch64\n5.4.141-67.229.amzn2.aarch64\n5.4.144-69.257.amzn2.aarch64\n5.4.149-73.259.amzn2.aarch64\n5.4.156-83.273.amzn2.aarch64\n5.4.162-86.275.amzn2.aarch64\n5.4.172-90.336.amzn2.aarch64\n5.4.176-91.338.amzn2.aarch64\n5.4.181-99.354.amzn2.aarch64\n5.4.186-102.354.amzn2.aarch64\n5.4.188-104.359.amzn2.aarch64\n5.4.190-107.353.amzn2.aarch64\n5.4.196-108.356.amzn2.aarch64\n5.4.201-111.359.amzn2.aarch64\n5.4.204-113.362.amzn2.aarch64\n5.4.209-116.363.amzn2.aarch64\n5.4.209-116.367.amzn2.aarch64\n5.4.214-120.368.amzn2.aarch64\n5.4.217-126.408.amzn2.aarch64\n5.4.219-126.410.amzn2.aarch64\n5.4.219-126.411.amzn2.aarch64\n5.4.224-128.414.amzn2.aarch64\n5.4.226-129.415.amzn2.aarch64\n5.4.228-131.415.amzn2.aarch64\n5.4.228-132.418.amzn2.aarch64\n5.10.29-27.126.amzn2.aarch64\n5.10.29-27.128.amzn2.aarch64\n5.10.35-31.135.amzn2.aarch64\n5.10.47-39.130.amzn2.aarch64\n5.10.50-44.131.amzn2.aarch64\n5.10.50-44.132.amzn2.aarch64\n5.10.59-52.142.amzn2.aarch64\n5.10.62-55.141.amzn2.aarch64\n5.10.68-62.173.amzn2.aarch64\n5.10.75-79.358.amzn2.aarch64\n5.10.82-83.359.amzn2.aarch64\n5.10.93-87.444.amzn2.aarch64\n5.10.96-90.460.amzn2.aarch64\n5.10.102-99.473.amzn2.aarch64\n5.10.106-102.504.amzn2.aarch64\n5.10.109-104.500.amzn2.aarch64\n5.10.112-108.499.amzn2.aarch64\n5.10.118-111.515.amzn2.aarch64\n5.10.126-117.518.amzn2.aarch64\n5.10.130-118.517.amzn2.aarch64\n5.10.135-122.509.amzn2.aarch64\n5.10.144-127.601.amzn2.aarch64\n5.10.147-133.644.amzn2.aarch64\n5.10.149-133.644.amzn2.aarch64\n5.10.155-138.670.amzn2.aarch64\n5.10.157-139.675.amzn2.aarch64\n5.10.162-141.675.amzn2.aarch64\n5.10.165-143.735.amzn2.aarch64\n5.13.0-1008-aws #9~20.04.2-Ubuntu SMP Tue Dec 14 04:21:09 UTC 2021\n5.13.0-1011-aws #12~20.04.1-Ubuntu SMP Thu Jan 13 17:25:31 UTC 2022\n5.13.0-1012-aws #13~20.04.1-Ubuntu SMP Wed Jan 19 16:27:19 UTC 2022\n5.13.0-1014-aws #15~20.04.1-Ubuntu SMP Thu Feb 10 19:23:45 UTC 2022\n5.13.0-1017-aws #19~20.04.1-Ubuntu SMP Mon Mar 7 12:55:31 UTC 2022\n5.13.0-1019-aws #21~20.04.1-Ubuntu SMP Wed Mar 16 11:55:27 UTC 2022\n5.13.0-1021-aws #23~20.04.2-Ubuntu SMP Thu Mar 31 11:41:36 UTC 2022\n5.13.0-1022-aws #24~20.04.1-Ubuntu SMP Thu Apr 7 22:14:11 UTC 2022\n5.13.0-1023-aws #25~20.04.1-Ubuntu SMP Mon Apr 25 19:31:09 UTC 2022\n5.13.0-1025-aws #27~20.04.1-Ubuntu SMP Fri May 20 07:25:34 UTC 2022\n5.13.0-1028-aws #31~20.04.1-Ubuntu SMP Fri Jun 3 10:51:38 UTC 2022\n5.13.0-1029-aws #32~20.04.1-Ubuntu SMP Thu Jun 9 13:06:11 UTC 2022\n5.13.0-1031-aws #35~20.04.1-Ubuntu SMP Mon Jun 13 22:33:23 UTC 2022\n5.14.0-70.13.1.el9_0.aarch64\n5.14.0-70.17.1.el9_0.aarch64\n5.14.0-70.22.1.el9_0.aarch64\n5.14.0-70.26.1.el9_0.aarch64\n5.14.0-70.30.1.el9_0.aarch64\n5.15.0-1004-aws #6-Ubuntu SMP Thu Mar 31 09:49:20 UTC 2022\n5.15.0-1005-aws #7-Ubuntu SMP Wed Apr 20 03:45:26 UTC 2022\n5.15.0-1008-aws #10-Ubuntu SMP Wed May 18 17:32:29 UTC 2022\n5.15.0-1009-aws #11-Ubuntu SMP Thu May 26 19:39:49 UTC 2022\n5.15.0-1011-aws #14-Ubuntu SMP Wed Jun 1 21:02:36 UTC 2022\n5.15.0-1013-aws #17-Ubuntu SMP Fri Jun 10 10:43:12 UTC 2022\n5.15.0-1014-aws #18-Ubuntu SMP Wed Jun 15 20:06:08 UTC 2022\n5.15.0-1015-aws #19-Ubuntu SMP Wed Jun 22 17:45:56 UTC 2022\n5.15.0-1017-aws #21-Ubuntu SMP Fri Aug 5 11:14:45 UTC 2022\n5.15.0-1019-aws #23-Ubuntu SMP Wed Aug 17 18:35:04 UTC 2022\n5.15.0-1020-aws #24-Ubuntu SMP Thu Sep 1 16:05:45 UTC 2022\n5.15.0-1021-aws #25-Ubuntu SMP Wed Sep 21 23:31:17 UTC 2022\n5.15.0-1022-aws #26-Ubuntu SMP Thu Oct 13 12:59:49 UTC 2022\n5.15.0-1023-aws #27-Ubuntu SMP Thu Oct 20 16:46:19 UTC 2022\n5.15.43-20.103.amzn2.aarch64\n5.15.43-20.123.amzn2.aarch64\n5.15.50-23.125.amzn2.aarch64\n5.15.54-25.126.amzn2.aarch64\n5.15.57-29.131.amzn2.aarch64\n5.15.59-33.133.amzn2.aarch64\n5.15.69-37.134.amzn2.aarch64\n5.15.73-48.135.amzn2.aarch64\n5.15.75-48.135.amzn2.aarch64\n5.15.79-51.138.amzn2.aarch64\n5.15.86-53.137.amzn2.aarch64\n5.15.90-54.138.amzn2.aarch64\n"
sensor_version_number=14810

fuzzy_matching=0
matched=0
user_input=0
quiet=0

echo_stdout()
{
    msg=$1

    test $quiet -eq 0 && echo $msg
}

exit_usage()
{
    retval=$1

    echo "Usage: $(basename $0) [options]"
    echo "    -h print usage."
    echo "    -v print version."
    echo "    -k input kernel release to see if it is supported."
    echo "    -q quiet output."

    exit $retval
}

exit_supported()
{
    case $fuzzy_matching in
    0)
        echo_stdout "Host OS $uname is supported by Sensor version $sensor_version_number."
        ;;
    1)
        echo_stdout "Host OS $(uname -r) is supported (fuzzy matching $uname) by Sensor version $sensor_version_number."
        ;;
    *)
        echo "Internal error happened $fuzzy_matching" >&2
        exit 2
    esac
    exit 0
}

exit_nonsupported()
{
    echo "Host OS $(uname -srv) is not supported by Sensor version $sensor_version_number." >&2
    exit 1
}

exit_matched()
{
    _uname=$1

    if [ $quiet -eq 0 ]; then
        echo -n "$_uname matches:"
        test "$fuzzy_matching" -eq 1 && echo -n " (fuzzy kernel matching enabled)"
        echo
        echo -e "$kernels" | grep -E "^$_uname"
    fi

    exit 0
}

adjust_fuzzy_kernel_uname()
{
    _uname=$1

    if [ "$fuzzy_matching" -eq 1 ]; then
        while true; do
            _ver=$(echo $_uname | grep -oE 'el[6789](_[[:digit:]]*)?')
            test -z $_ver && break
            _uname=$(echo $_uname | sed -e "s/${_ver}.*\.x86_64/${_ver}.x86_64/")
            break
        done
    fi

    echo $_uname
}

user_input_kernel()
{
    test -z "$1" && exit_usage 2

    _orig_uname=$1
    _uname=$(adjust_fuzzy_kernel_uname $1)
    _count=$(echo -e "$kernels" | grep -E "^$_uname" | wc -l)

    if [ $_count -eq 1 ]; then
        _matched=$(echo -e "$kernels" | grep -E "^$_uname")
        if [ "$_uname" = "$_matched" ]; then
            if [ "$_orig_uname" = "$_uname" ]; then
                echo_stdout "$_uname is supported by Sensor version $sensor_version_number."
            else
                echo_stdout "$_orig_uname is supported (fuzzy matching $_uname) by Sensor version $sensor_version_number."
            fi
            exit 0
        else
            exit_matched $_uname
        fi
    elif [ $_count -eq 0 ]; then
        echo "$_uname is not supported by Sensor version $sensor_version_number." >&2
        exit 1
    else
        exit_matched $_uname
    fi
}


for bin in "uname" "sed" "awk" "wc" "grep"; do
    if ! type -P $bin >/dev/null 2>&1; then
        echo "$bin does not exist."
        exit 2
    fi
done

while getopts mvhqk: opt; do
    case $opt in
        m)
            fuzzy_matching=1
            ;;
        v)
            echo $(basename $0) $sensor_version_number
            echo
            echo "CrowdStrike, Inc. Copyright (c) 2023. All rights reserved."
            exit 0
            ;;
        k)
            uname=$OPTARG
            user_input=1
            ;;
        h)
            exit_usage 0
            ;;
        q)
            quiet=1
            ;;
        *)
            exit_usage 2
            ;;
    esac
done

shift $(expr $OPTIND - 1)
test $# -eq 0 || exit_usage 2

test "$user_input" -eq 1 && user_input_kernel $uname

uname=$(uname -rv)
echo -e "$kernels" | grep -q "$uname" && exit_supported

uname="$(uname -r)"
test $(echo -e "$kernels" | grep "$uname" | wc -l) -gt 1 && exit_nonsupported

matched="$(echo -e "$kernels" | grep "$uname")"

test -n "$(echo "$matched" | awk '{print $2}')" && exit_nonsupported

test "$uname" = "$matched" && exit_supported

uname=$(adjust_fuzzy_kernel_uname $uname)
echo -e "$kernels" | grep -q $uname && exit_supported

exit_nonsupported
